Romlige forskjeller i næringsstruktur, virkninger av eksogene sjokk i basissysselsettingen, og lokale forskjeller I sysselsettingsvekst.

I denne oppgaven vil vi se på næringsstrukturer på Haugalandet, Sunnhordland og Hardanger.

Problemstillinger og beregninger vi vil se nærmere på

Oversikt over befolkningene i regionene

Haugalandet

Haugalandet består av kommunene Bokn (852), Haugesund (37357), Karmøy (42186), Sauda (4595), Tysvær(11065), Utsira(198) og Vindafjord(8714). tilsammen bor det 104967 personer i denne regionen. i tidsperioden vi har hentet inn data har det vert kommunesammenslåing i denne regionen. Da ble Ølen og vindafjord slått i sammen til en kommune (hvordan har vi tatt hensyn til dette???)

Sunnhordland og Ullensvang

Sunnhordland og Ullensvang består av kommunene Bømlo(11957), Etne(4062), Fitjar(3189), Kvinnherad(13071), Stord(18759), Sveio(5766), Tysnes(2869) og Ullensvang(11048). Tilsammen bor det 70721 personer i denne regionen.

Tallene er hentet fra SSB 09.01.21 (https://www.ssb.no/statbank/table/01223/tableViewLayout1/) gjelder for 4 kvartal 2020.

1 Sysselsetting i ulike næringer, etter arbeidssted

Haugalandet

Første regionen vi velger å se på er Haugalandet. Her ønsker vi å se på utviklingen fra 2008 til 2020, av antall ansatte i sin helhet i regionen, samt de 6 mest relevante næringene.

<<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c

I 2020 er det i underkant av 50 000 ansatte i alle næringer på Haugalandet. Av Fig. 1 ser vi at Haugalandet fikk en nedgang i antall ansatte i 2015 og 2016. I 2017 og 2018 ble det vekst, frem til det snudde i 2019 igjen.

<<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c

I Fig. 2 ser vi at flere av kommunene på Haugalandet har hatt liten arbeidsplassvekst, med unntak av Tysvær, Vindafjord og Karmøy i den siste tiårsperioden. Vi ser dette mer tydelig på fig. 3 og 4.

<<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c

Figur 3 og 4 viser utviklingen av det totale antall ansatte i alle næringer på kommunalt nivå, innenfor Haugaland-regionen.

I disse figurene, så ser vi tydelig at Haugesund har hatt reduksjon i antall ansatte totalt sett, mens Karmøy, Vindafjord og Tysvær har hatt en markant vekst de siste ti årene. Siden Haugesund har flest arbeidsplasser betyr utviklingen i Haugesund mye for de samlede tallene.

Warning: Removed 1 row(s) containing missing values (geom_path).
<<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c
Warning: Removed 1 row(s) containing missing values (geom_path).
<<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c

Figur 5 og 6 viser utviklingen av de 6 mest relevante næringene i Haugalandsregionen på kommune nivå.

Vi ser i de tre største kommunene, Haugesund, Karmøy og Vindafjord utgjør næringene Helse- og Sosialtjenester og Industri de største. Helse- og Sosialtjenester har vokst jevnt og trutt de siste tiårene, mens antall ansatte i industrinæringen har variert fra kommune til kommune. I Haugalandet utgjør primærnæringer (jordbruk, Skogbrug og Fiske) en større andel, enn hos Karmøy og Haugesund hvor primærnæringene kun utgjøre en liten andel.

Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.

Det er relativt store kommunevise forskjeller i næringsstrukturen. Rogaland har en forholdsvis ensidig næringsstruktur, olje og gass er dominerende. Fylket er suverent dominerende for fossil energi. De har for øvrig de siste årene satset på et en mer differensiert næringsstruktur og næringsliv ved å satse på helse, IKT og fornybar energi.

I våre modeller, er satsingen på helse den mest tydelige. Av rent tekniske grunner er det vanskelig å se utviklingen i enkelte næringer som utgjør små andeler, på grunn av skalaen som er benyttet. Til tross for dette, kan man se at næringsstrukturen i regionen samlet generelt sett har endret seg lite.

Rogaland har gode jordbruksmuligheter, men i Fig. 2: Haugalandet ser vi en nedgang i sysselsettingen de siste tiårene, mens det er en marginal økning i Sunnhordaland, jf. Fig 9. I Fig. 12: ser vi at Tysnes har hatt en markant økning i primærnæringen, relativt sett.

Universitets- og høgskolesektoren er liten i Rogaland, og den består for det første av Universitetet i Stavanger (UiS) og Høgskulen på Vestlandet (HVL) med campus Haugesund.

Haugaland Vekst, som er eigd/drevet av Haugalandsregionen er i spissen på å legge til rette for å etablere ny industri samt andre arbeidsplasser i regionen.

I helsesektoren er Stavanger universitetssykehus (SuS) sentralt.

Sunnhordland

Videre ønsker vi å se på den samme utviklingen, men denne gangen i Sunnhordlandsregionen.

<<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c

Her viser figur 7 utviklingen til den totale summen av ansatte i Sunnhordlandsregionen fra 2008 til 2020. Sunnhordaland har i 2020 i underkant av 25 500 ansatte. Vi ser ut ifrå figuren at Sunnhordlandsregionen hadde ein markant vekst ifrå 2008 til 2014 med periodar med svak nedgang. Fra 2014 har det vært en reduksjon i totalt antall ansatte.

<<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c

Figur 8 viser utviklingen av totalt ansatte i Sunnhordlandsregionen på kommunenivå i hele regionen fra 2008 til 2020. Denne figuren gir oss en oversikt, men er ikke heilt brukervennelig. Vi lager dermed en mer oversiktlig figur, jf. figur 9 & 10.

<<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c

Vi ser her ut ifra figur 9 og 10 utviklingen for hver enkelt kommune i Sunnhordland totalt sett, og her ser vi mye tydligere utviklingen fra 2008 til 2020. En kan se her at Kvinnherad, Etne og Fitjar har hatt en reduksjon i totalt ansatte, mens Tysnes og Sveio har hatt ein kraftig vekst. En interessant bemerking er Stord i 2014 og Kvinnherad fra 2008 til 2017.

For å få et bedre oversikt over utviklingen i kommunen ønsker vi å se på de 6 mest relevante næringene i hver kommune.

<<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c
Warning: Removed 1 row(s) containing missing values (geom_path).
<<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c

Figur 11 og 12 viser de 6 mest relevante næringene i hver enkelt kommune i Sunnhordlandsregionen fra 2008 til 2020.

En ser ut ifra figur 11 at i de tre største kommunene, Bømlo, Kvinnherad og Stord så har de alle hatt en reduksjon i industrien, samtidig som de har hatt en vekst i helse- og sosialtjenester. Tysnes har vært stabil når det kommer til industri, men har sett ein markant vekst i primærnæringen (Jordbruk, Skogbruk og Fiske).

Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.

Det første bemerkelsesverdige i Sunnhordlandsregionen er den markante reduksjonen i industri i Stord kommune i 2014, samt Kvinnherad fra 2008. Dette stemmer overens med to hendelser. Den første er oljeknekken i 2014 som medførte at bl.a. Aker Stord AS som er avhengig av Olje-industrien måtte permitere.

Stord er en kommune som har mye offshore industri. I 2008/2009 så stengte Sør-Norge Aluminium “B-Hallen” som medførte 50% reduksjon i produksjon, og dermed ansatte. Interessant å bemerke at i Kvinnherad så er antall industriarbeidere redusert samtidig som antall ansatte i Helse- og Sosialetjenester økt. Bømlo har også sett en stabil reduksjon i ansatte innen industri, samt vekst i Helse- og Sosialetjenester frem til 2018.

Ser en på hele Sunnhordlandsregionen i sin helhet, så ser vi en svært tydelig vekst innen Helse- og Sosialetjenester, og reduksjon innen industri i hele regionen. Kvinnherad, Tysnes og Fitjar har opplevd ein markant vekst innen primærnæring. Kan det vere ein grunn til dette som burde diskuterast??

Fortsett Her (OA, KH)

Hardanger

Til slutt må vi gjere det samme med Hardanger

I henhold til oppgavens krav til betrakter vi Hardanger før 2019 som Ullensvang- og Odda kommune som to separerte kommuner. i 2020 så ble Ullensvang, Odda og Jondal slått sammen til Ullensvang. Dette forklarer den voldsomme økningen i sysselsetting i regionen ved tidspunktet for kommunesammenslåing.

<<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c
Warning: Removed 1 row(s) containing missing values (geom_path).
<<<<<<< HEAD

=======

>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c

Ullensvang kommune har stor kraftproduksjon og hovednæringen er industri. Majoriteten av kraftproduksjonen foregår i tidligere Odda. Odda er et ensidig industristed, men har også en maritim næring i tillegg. I figur 16 ser vi at industrinæringen utgjør en betraktelig større andel av sysselsettingen i her. Industrinæringen er også omfattet og bygg- og anleggsvirksomhet. På motsatt side er jordbruk, helse- og sosialtjenester dominerende i Ullensvang.

Generelt om Ullensvang kommune

Ullensvang kommune (med Odda) har hatt en jevn og negativ befolkningsvekst i mange tiår. Det gjenspeiles ikke tydelig i våre modeller på grunn av skalaen som er brukt. I tillegg har vi ikke hensyntatt innvandrende arbeidere, eller midlertidige fraflyttede som for eksempel studenter.

2

Finner lokaliseringskvotienter for ulike næringer i ulike kommuner, og for regionen samlet

[1] 0.1050339
[1] 0.1050339

For region Haugaland:

Error: Problem with `mutate()` column `Eir_Er_industri`.
ℹ `Eir_Er_industri = Industri/`Alle Næringer``.
x object 'Industri' not found
Run `rlang::last_error()` to see where the error occurred.

For Sunnhordaland:

For Hardanger:

3 Sysselsetting i ulike næringer, etter bosted (Modeller under arbeid)

Haugalandet

<<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c

Sunnhordland

<<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c

Hardanger

<<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c <<<<<<< HEAD

======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c

Oppgave 4

Pendling er et viktig begrep å bruke når vi snakker om regional utvikling. De ulike kommunene eller regionene kan ha ulike behov. De aller fleste kommuner har for lite arbeidsplasser i forhold til antall arbeidene. Det vil si at de fleste plasser er de avhengige av å pendle til andre plasser. Det kan være andre kommuner i samme region eller andre regioner. Det finnes også begrepet netto innpendling som betyr at noen kommuner eller regioner har flere arbeidsplasser tilgjengelige enn de har folk til å jobbe der innad i kommunen. Vi skal se på innpendling og utpendling som vil kunne fortelle oss i hvilken grad et sted er integrert i et større arbeidsmarked https://regionalanalyse.no/rapport/3004/1/4.

Vi har laget en tabell som tar for seg regionen Haugalandet. Her kan vi skille de forskjellige kommunene og se hvor andelen av innpendling og utpendling er størst eller minst.

Vi kan se på Karmøy som et eksempel når det gjelder innpendling og utpendling. I Karmøy kommune er det 11637 stykk som jobber i egen kommune, mens 5888 pendler til andre kommuner i regionen. Herav pendler 4916 personer til Haugesund, 9 pendler til Sauda, 31 pendler til Bokn, 712 til Tysvær, 218 til Vindafjord og 2 personer pendler til Utsira. Når det kommer til innpendling kan vi se at det til sammen er 3384 som pendler til Karmøy fra Hauglandsregionen. Den største andelen fra samme region som pendler til Karmøy er Haugesund. Vi kan se fra tabellen at det er 2586 stykker som pendler fra Haugesund til Karmøy.

På Utsira som har en mindre befolkning ser vi at 85 jobber i hjemkommunen, mens 9 stk pendler til andre kommune i regionen, henholdsvis til Haugesund, Tysvær og Karmøy.

På Haugalandet kan vi se

<<<<<<< HEAD
Bokommune k_1106 k_1135 k_1145 k_1146 k_1149 k_1151 k_1160
Haugesund_1106 11714 11 22 1029 2586 3 264
Sauda_1135 31 1789 0 2 6 0 27
Bokn_1145 50 0 223 41 41 0 16
Tysvær_1146 1540 1 33 2270 645 0 267
Karmøy_1149 4916 9 31 712 11637 2 218
Utsira_1151 4 0 0 2 3 85 0
Vindafjord_1160 306 10 1 238 103 0 3231

I Sunnhordaland ser det slik ut pr 2020

Bokommune k_4611 k_4612 k_4613 k_4614 k_4615 k_4616 k_4617 k_4618
Etne_4611 1306 1 0 11 0 4 28 22
Sveio_4612 6 1055 27 137 2 6 1 1
Bømlo_4613 1 35 4277 623 25 7 8 3
Stord_4614 11 52 280 7314 169 32 33 9
Fitjar_4615 0 8 20 472 819 5 2 0
Tysnes_4616 1 3 4 66 5 948 24 1
Kvinnherad_4617 32 0 24 178 4 36 5270 83
Ullensvang_4618 10 0 1 7 1 1 53 4711
======= >>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c
<<<<<<< HEAD
LS0tCnRpdGxlOiAiQXJiZWlkc2tyYXYgdsOlcmVuIDIwMjIiCmF1dGhvcjoKLSBLZXZpbiBIYQotIE9sYSBBbmRyZSBPbG9mc3NvbgotIEFubiBFbGlzYWJldGggSmFjb2JzZW4KLSBIZWlkaSBNYXJpZSBSb2xmc25lcwotIERhbmllbCBLYXJzdGFkCi0gSGVucmlldHRlIEhhbnNlbgotIFN1c2FubiBCaXJrZWxhbmQgU2l2ZXJ0c2VuCi0gVmlsZGUgSGF1Z2xhbmQKc3VidGl0bGU6IE1TQjEwNiwgQW52ZW5kdCBieS0gb2cgcmVnaW9uYWzDuGtvbm9taQpvdXRwdXQ6CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKbGFuZzogbm8tTkIKZWRpdG9yX29wdGlvbnM6IAogIG1hcmtkb3duOiAKICAgIHdyYXA6IHNlbnRlbmNlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeShyZWFkcikKICBsaWJyYXJ5KGdncGxvdDIpCiAgbGlicmFyeShrbml0cikKICBsaWJyYXJ5KHZpcmlkaXMpCiAgbGlicmFyeSh0aWR5dmVyc2UpCiAgfSkKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89RkFMU0UsIGluY2x1ZGUgPSBUUlVFKQpgYGAKCiMgUm9tbGlnZSBmb3Jza2plbGxlciBpIG7DpnJpbmdzc3RydWt0dXIsIHZpcmtuaW5nZXIgYXYgZWtzb2dlbmUgc2pva2sgaSBiYXNpc3N5c3NlbHNldHRpbmdlbiwgb2cgbG9rYWxlIGZvcnNramVsbGVyIEkgc3lzc2Vsc2V0dGluZ3N2ZWtzdC4KCkkgZGVubmUgb3BwZ2F2ZW4gdmlsIHZpIHNlIHDDpSBuw6ZyaW5nc3N0cnVrdHVyZXIgcMOlIEhhdWdhbGFuZGV0LCBTdW5uaG9yZGxhbmQgb2cgSGFyZGFuZ2VyLgoKUHJvYmxlbXN0aWxsaW5nZXIgb2cgYmVyZWduaW5nZXIgdmkgdmlsIHNlIG7DpnJtZXJlIHDDpQoKLSAgIEJlc2tyaXZlIHNpdHVhc2pvbmVuIHNsaWsgZGVuIGVyIGZvciAyMDIwLCBvZyBmb3IgdXR2aWtsaW5nZW4gb3ZlciB0aWQuCi0gICBTeXNzZWxzZXR0aW5nc3V0dmlrbGluZ2VuIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciBvZyBmb3IgcmVnaW9uZW4gc2FtbGV0LgotICAgQW5kZWxlbiBhdiBzeXNzZWxzZXR0aW5nZW4gaW5uZW5mb3IgZW5rZWx0bsOmcmluZ2VyLCBvZyBzYW1tZW5saWduZSBzaXR1YXNqb25lbiBvZyB1dHZpa2xpbmdlbiBmb3IgbG9rYWxlIGtvbW11bmVyIG9nIGxva2FsIHJlZ2lvbiBtZWQgZGV0IHNvbSBnamVsZGVyIGZvciBuYXNqb25lbiBzYW1sZXQuCi0gICBCZXJlZ25lIGxva2FsaXNlcmluZ3Nrdm90aWVudGVyIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciwgb2cgZm9yIHJlZ2lvbmVuKGUpIHNhbWxldC4KLSAgIEJlcmVnbmUgdWxpa2UgYWdncmVnZXJpbmdzbml2w6VlciBhdiBuw6ZyaW5nZXIgb2cgZ2VvZ3JhZmksIGlkZW50aWZpc2VyIG11bGlnZSBrbHluZ2VyIGJhc2VydCBww6UgdmVyZGllbmUgZm9yIGxva2FsaXNlcmluZ3Nrdm90aWVudGVuZS4KLSAgIEdqw7hyZSBlbiB2dXJkZXJpbmcgYXYgaHZvciBrb25zZW50cmVydC9zcHJlZHQgZW4gbsOmcmluZyBlciBmb3JkZWx0IG1lbGxvbSBrb21tdW5lbmUgaSByZWdpb25lbiwgYmFzZXJ0IHDDpSBiZXJlZ25pbmdlciBhdiBkZW4gcm9tbGlnZSBHaW5pLWluZGVrc2VuLgotICAgVnVyZGVyZSBvbSBzYW1tZW5saWduaW5nc2dydW5ubGFnZXQgYsO4ciB2w6ZyZSBzYW1sZXQgc3lzc2Vsc2V0dGluZyBpIHJlZ2lvbmVuLCBlbGxlciBzYW1sZXQgc3lzc2Vsc2V0dGluZyBhdiBuYXNqb25lbiwgb2cgZmlubmUgdXQgaHZpbGtlbiByb2xsZSBkZXQgc3BpbGxlciBvbSBlbiBicnVrZXIgcmVnaW9uYWxlIGVsbGVyIG5hc2pvbmFsZSBhbnNsYWcgZm9yIHNhbWxldCBzeXNzZWxzZXR0aW5nLgotICAgRmlubmUgdXQgb20gbsOmcmluZ3NzdHJ1a3R1cmVuIGkgcmVnaW9uZW4gaGFyIGJsaXR0IG1lciBlbGxlciBtaW5kcmUgZGl2ZXJzaWZpc2VydCwgbWFuZ2ZvbGRpZywgb3ZlciB0aWQuCi0gICBCZXJlZ25lIGVuIHJlZ2lvbmFsIG1hbmdmb2xkLWluZGVrcyBvZyBmaW5uZSB1dCBodm9yZGFuIHZlcmRpZW5lIHDDpSBlbiBzbGlrIGluZGVrcyBlciBlbmRyZXQgb3ZlciB0aWQuCi0gICBWdXJkZXJlIG9tIHN5c3NlbHNldHRpbmdzYW5kZWxlbmUgc2thbCBzYW1tZW5saWduZXMgbWVkIG5hc2pvbmFsZSBlbGxlciByZWdpb25hbGUgYW5kZWxlciBmb3IgZGUgdWxpa2UgbsOmcmluZ2VuZQotICAgR2plbnRhIGJlcmVnbmluZ2VyIGZvciBhbmRlbGVyIGF2IGFyYmVpZHN0YWtlcmUgaSB1bGlrZSBuw6ZyaW5nZXIsIGxva2FsaXNlcmluZ3Nrdm90aWVudGVyLCBkZW4gcm9tbGlnZSBHaW5pLSBrb2VmZmlzaWVudGVuIG9nIG3DpWxldCBmb3IgbWFuZ2ZvbGQgYXYgbsOmcmluZ2VyLCBtZWQgdXRnYW5nc3B1bmt0IGkgZGF0YSBzcGVzaWZpc2VydCBldHRlciBhcmJlaWRzdGFrZXJuZXMgYm9zdGVkLgotICAgU2FtbWVubGlnbmUgcmVzdWx0YXRlbmUgZm9yIGRhdGEgZXR0ZXIgYXJiZWlkc3N0ZWQsIG9nIGtvbW1lbnRlciBodmlsa2VuIGluZm9ybWFzam9uIHJlc3VsdGF0ZW5lIGdpciBvbSByb21saWcgbW9iaWxpdGV0IGkgYXJiZWlkc21hcmtlZGV0LgotICAgR2kgZW4ga29ydCBvdmVyc2lrdCBvdmVyIHBlbmRsZXJzdHLDuG1tZXIgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuCi0gICBCZXJlZ25lIG9nIHByZXNlbnRlcmUgYW5kZWxlciBhdiBhcmJlaWRzdGFrZXJlIG1lZCBib3N0ZWQgaSBlbiBrb21tdW5lIHNvbSBoYXIgYXJiZWlkc3N0ZWQgaSBhbmRyZSBrb21tdW5lciwgb2cgZ2rDuHIgZGV0IHNhbW1lIGZvciBhbmRlbGVuIGF2IGpvYmJlbmUgaSBlbiBrb21tdW5lIHNvbSBlciBiZXNhdHQgYXYgYXJiZWlkc3Rha2VyZSBmcmEgYW5kcmUga29tbXVuZXIuCi0gICBEaXNrdXRlcmUgZm9yc2tqZWxsZXIgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuLCBvZyBkcsO4ZnQgdXR2aWtsaW5nZW4gb3ZlciB0aWQgZm9yIHVsaWtlIGtvbW11bmVyCi0gICBCZXJlZ25lIG9nIHByZXNlbnRlcmUgYW5kZWxlbiBhdiBhcmJlaWRzdGFrZXJlIHNvbSBib3Igb2cgam9iYmVyIGlubmVuZm9yIHNhbW1lIGtvbW11bmUuIFNlIG9tIGRldCBlciBzeXN0ZW1hdGlza2UgZm9yc2tqZWxsZXIgc2V0dCBpIGZvcmhvbGQgdGlsIHNlbnRyYWxpdGV0IG9nIHRpbGdqZW5nZWxpZ2hldCBpIGRldCBsb2thbGUgYXJiZWlkc21hcmtlZGV0LiBPZyBvbSBkZXQgZXIgYmVzdGVtdGUgdHJlbmRlciBpIHV0dmlrbGluZ2VuIGZvciB1bGlrZSBrb21tdW5lci4KLSAgIEJydWtlIGJlcmVnbmluZ2VuZSBhdiBsb2thbGlzZXJpbmdrdm90aWVudGVyIHRpbCDDpSBkZWxlIG7DpnJpbmdlbmUgaW5uIGkgbG9rYWwtIG9nIGJhc2lzbsOmcmluZ2VyCi0gICBGb3JtdWxlcmUgZW4gw7hrb25vbWlzayBiYXNlbW9kZWxsIG9nIGJlcmVnbmUgw7hrb25vbWlza2UgYmFzZW11bGlwbGlrYXRvcmVyIGZvciBlbmtlbHRrb21tdW5lciBvZyByZWdpb24oZXIpLgotICAgVnVyZGVyZSBsb2thbGUgdmlya25pbmdlciBhdiBhbHRlcm5hdGl2ZSBsb2thbGlzZXJpbmdlciBpIE9kZGEsIEh1c25lcyBvZyBMZWlydmlrCi0gICBEcsO4ZnRlIHZpcmtuaW5nZXIgYXYgZXQgc2xpa3QgcG9zaXRpdnQgZWtzb2dlbnQgc2pva2sgZm9yIGRlbiBsb2thbGUgw7hrb25vbWllbiBnamVubm9tIGJydWsgYXYgZW4gYmFzZW1vZGVsbAotICAgRmlubmUgdXQgaHZvcmRhbiB2aXJrbmluZ2VuZSBldmVudHVlbHQgc3ByZXMgdGlsIGFuZHJlIGtvbW11bmVyIGkgcmVnaW9uZW4gb2cgaHZvcmRhbiBlbiBrYW4gYnJ1a2UgZGF0YSBmb3IgcGVuZGxlc3Ryw7htbWVyIHRpbCDDpSBwcmVkaWtlcmUgdmlya25pbmdlciBww6Ugc3lzc2Vsc2V0dGluZ2VuIGkgdWxpa2Uga29tbXVuZXIuCi0gICBTYW1tZW5saWduZSBkaXNzZSBwcmVkaWtzam9uZW5lIG1lZCBkZSB2aSBmw6VyIG7DpXIgdmkgZ2plbm5vbWbDuHJlciBhbmFseXNlbiBww6UgcmVnaW9uYWx0IG5pdsOlLgotICAgR2kgZW4gc2hpZnQtc2hhcmUgYW5hbHlzZSBpIGVuIGRpc2t1c2pvbiBhdiBmb3Jza2plbGxlciBpIHZla3N0IGZvciBla3NlbXBlbCBtZWxsb20gaW5kcmUsIG1pZHRyZSBvZyB5dHJlIGRlbGVyIGF2IHJlZ2lvbmVuLCBlbGxlciBldmVudHVlbHQgb21yw6VkZXIva29tbXVuZXIgc29tIGhhciBoYXR0IHN0ZXJrIG9nIHN2YWsgYmVmb2xrbmluZ3N1dHZpa2xpbmcuCgojIyBPdmVyc2lrdCBvdmVyIGJlZm9sa25pbmdlbmUgaSByZWdpb25lbmUKCiMjIyBIYXVnYWxhbmRldAoKSGF1Z2FsYW5kZXQgYmVzdMOlciBhdiBrb21tdW5lbmUgQm9rbiAoODUyKSwgSGF1Z2VzdW5kICgzNzM1NyksIEthcm3DuHkgKDQyMTg2KSwgU2F1ZGEgKDQ1OTUpLCBUeXN2w6ZyKDExMDY1KSwgVXRzaXJhKDE5OCkgb2cgVmluZGFmam9yZCg4NzE0KS4KdGlsc2FtbWVuIGJvciBkZXQgMTA0OTY3IHBlcnNvbmVyIGkgZGVubmUgcmVnaW9uZW4uCmkgdGlkc3BlcmlvZGVuIHZpIGhhciBoZW50ZXQgaW5uIGRhdGEgaGFyIGRldCB2ZXJ0IGtvbW11bmVzYW1tZW5zbMOlaW5nIGkgZGVubmUgcmVnaW9uZW4uCkRhIGJsZSDDmGxlbiBvZyB2aW5kYWZqb3JkIHNsw6V0dCBpIHNhbW1lbiB0aWwgZW4ga29tbXVuZSAoaHZvcmRhbiBoYXIgdmkgdGF0dCBoZW5zeW4gdGlsIGRldHRlPz8/KQoKIyMjIFN1bm5ob3JkbGFuZCBvZyBVbGxlbnN2YW5nCgpTdW5uaG9yZGxhbmQgb2cgVWxsZW5zdmFuZyBiZXN0w6VyIGF2IGtvbW11bmVuZSBCw7htbG8oMTE5NTcpLCBFdG5lKDQwNjIpLCBGaXRqYXIoMzE4OSksIEt2aW5uaGVyYWQoMTMwNzEpLCBTdG9yZCgxODc1OSksIFN2ZWlvKDU3NjYpLCBUeXNuZXMoMjg2OSkgb2cgVWxsZW5zdmFuZygxMTA0OCkuClRpbHNhbW1lbiBib3IgZGV0IDcwNzIxIHBlcnNvbmVyIGkgZGVubmUgcmVnaW9uZW4uCgpUYWxsZW5lIGVyIGhlbnRldCBmcmEgU1NCIDA5LjAxLjIxICg8aHR0cHM6Ly93d3cuc3NiLm5vL3N0YXRiYW5rL3RhYmxlLzAxMjIzL3RhYmxlVmlld0xheW91dDEvPikgZ2plbGRlciBmb3IgNCBrdmFydGFsIDIwMjAuCgpgYGB7ciBjc3ZfZmlsZXJ9CnN5c3NlbF9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvc3lzc2VsX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpobGRfYXJiIDwtIHJlYWRfY3N2KCJEYXRhL2hsZF9hcmIuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKc3VuX2FyYiA8LSByZWFkX2NzdigiRGF0YS9zdW5fYXJiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmhhcl9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvaGFyX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzeXNzZWxfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL3N5c3NlbF9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGxkX2JvcyA8LSByZWFkX2NzdigiRGF0YS9obGRfYm9zLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCnN1bl9ib3MgPC0gcmVhZF9jc3YoIkRhdGEvc3VuX2Jvcy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpoYXJfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL2hhcl9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvUGVuZGxpbmcuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGdsX1BlbmRsaW5nIDwtIHJlYWRfY3N2KCJEYXRhL2hnbF9QZW5kbGluZy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzdW5fUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvc3VuX1BlbmRsaW5nLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmBgYAoKIyAxIFN5c3NlbHNldHRpbmcgSSBVbGlrZSBOw6ZyaW5nZXIsIEV0dGVyIEFyYmVpZHNzdGVkCgojIyBIYXVnYWxhbmRldAoKRsO4cnN0ZSByZWdpb25lbiB2aSB2ZWxnZXIgw6Ugc2UgcMOlIGVyIEhhdWdhbGFuZGV0LgpIZXIgw7huc2tlciB2aSDDpSBzZSBww6UgdXR2aWtsaW5nZW4gZnJhIDIwMDggdGlsIDIwMjAsIGF2IGFudGFsbCBhbnNhdHRlIGkgc2luIGhlbGhldCBpIHJlZ2lvbmVuLCBzYW10IGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZS4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhdWdhbGFuZGV0XzF9CmhsZF9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBUb3RhbHQpKSArCiAgZ2VvbV9saW5lKCkgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxOiBIYXVnYWxhbmRldCIpKwogIHlsYWIoIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCkkgMjAyMCBlciBkZXQgaSB1bmRlcmthbnQgYXYgNTAgMDAwIGFuc2F0dGUgaSBhbGxlIG7DpnJpbmdlciBww6UgSGF1Z2FsYW5kZXQuCkF2IEZpZy4KMSBzZXIgdmkgYXQgSGF1Z2FsYW5kZXQgZmlrayBlbiBuZWRnYW5nIGkgYW50YWxsIGFuc2F0dGUgaSAyMDE1IG9nIDIwMTYuCkkgMjAxNyBvZyAyMDE4IGJsZSBkZXQgdmVrc3QsIGZyZW0gdGlsIGRldCBzbnVkZGUgaSAyMDE5IGlnamVuLgoKYGBge3IgQXJiZWlkc3N0ZWRfSGF1Z2FsYW5kZXRfMn0Kc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lIGMoMTEwNiwgMTEzNSwgMTE0NSwgMTE0NiwgMTE0OSwgMTE1MSwgMTE2MCkpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gYEFsbGUgTsOmcmluZ2VyYCwgKGFuZ2xlPTApKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIGxhYnModGl0bGUgPSAiRmlnLiAyOiBIYXVnYWxhbmRldCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkkgRmlnLgoyIHNlciB2aSBhdCBmbGVyZSBhdiBrb21tdW5lbmUgcMOlIEhhdWdhbGFuZGV0IGhhciBoYXR0IGxpdGVuIGFyYmVpZHNwbGFzc3Zla3N0LCBtZWQgdW5udGFrIGF2IFR5c3bDpnIsIFZpbmRhZmpvcmQgb2cgS2FybcO4eSBpIGRlbiBzaXN0ZSB0acOlcnNwZXJpb2Rlbi4KVmkgc2VyIGRldHRlIG1lciB0eWRlbGlnIHDDpSBmaWcuCjMgb2cgNC4KCmBgYHtyIGhsZF9hcmJfbG9uZ30KaGxkX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhdWdhbGFuZGV0XzNfU3TDuHJzdGVfQXJiZWlkc3RlZH0KaGxkX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJIYXVnZXN1bmQiLCAiS2FybcO4eSIsICJWaW5kYWZqb3JkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDM6IEhhdWdhbGFuZGV0OiBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfNF9NaW5zdGVfQXJiZWlkc3RlZH0KaGxkX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCb2tuIiwgIlNhdWRhIiwgIlR5c3bDpnIiLCAiVXRzaXJhIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDQ6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSBUeXN2w6ZyIG9nIFV0c2lyYSIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCkZpZ3VyIDMgb2cgNCB2aXNlciB1dHZpa2xpbmdlbiBhdiBkZXQgdG90YWxlIGFudGFsbCBhbnNhdHRlIGkgYWxsZSBuw6ZyaW5nZXIgcMOlIGtvbW11bmFsdCBuaXbDpSwgaW5uZW5mb3IgSGF1Z2FsYW5kLXJlZ2lvbmVuLgoKSSBkaXNzZSBmaWd1cmVuZSwgc8OlIHNlciB2aSB0eWRlbGlnIGF0IEhhdWdlc3VuZCBoYXIgaGF0dCByZWR1a3Nqb24gaSBhbnRhbGwgYW5zYXR0ZSB0b3RhbHQgc2V0dCwgbWVucyBLYXJtw7h5LCBWaW5kYWZqb3JkIG9nIFR5c3bDpnIgaGFyIGhhdHQgZW4gbWFya2FudCB2ZWtzdCBkZSBzaXN0ZSB0aSDDpXJlbmUuClNpZGVuIEhhdWdlc3VuZCBoYXIgZmxlc3QgYXJiZWlkc3BsYXNzZXIgYmV0eXIgdXR2aWtsaW5nZW4gaSBIYXVnZXN1bmQgbXllIGZvciBkZSBzYW1sZWRlIHRhbGxlbmUuCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfM19TdMO4cnN0ZV9BcmJlaWRzc3RlZH0KaGxkX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJIYXVnZXN1bmQiLCAiS2FybcO4eSIsICJWaW5kYWZqb3JkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gNTogSGF1Z2FsYW5kZXQ6IEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19IYXVnZWxhbmRldF80X01pbnN0ZV9BcmJlaWRzc3RlZH0KaGxkX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCb2tuIiwgIlNhdWRhIiwgIlR5c3bDpnIiLCAiVXRzaXJhIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gNjogSGF1Z2FsYW5kZXQ6IEJva24sIFNhdWRhLCBUeXN2w6ZyIG9nIFV0c2lyYSIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpGaWd1ciA1IG9nIDYgdmlzZXIgdXR2aWtsaW5nZW4gYXYgZGUgNiBtZXN0IHJlbGV2YW50ZSBuw6ZyaW5nZW5lIGkgSGF1Z2FsYW5kc3JlZ2lvbmVuIHDDpSBrb21tdW5lIG5pdsOlLgoKVmkgc2VyIGkgZGUgdHJlIHN0w7hyc3RlIGtvbW11bmVuZSwgSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQgdXRnasO4ciBuw6ZyaW5nZW5lIEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIgb2cgSW5kdXN0cmkgZGUgc3TDuHJzdGUuCkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIgaGFyIHZva3N0IGpldm50IG9nIHRydXR0IGRlIHNpc3RlIHRpw6VyZW5lLCBtZW5zIGFudGFsbCBhbnNhdHRlIGkgaW5kdXN0cmluw6ZyaW5nZW4gaGFyIHZhcmllcnQgZnJhIGtvbW11bmUgdGlsIGtvbW11bmUuCkkgSGF1Z2FsYW5kZXQgdXRnasO4ciBwcmltw6ZybsOmcmluZ2VyIChqb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UpIGVuIHN0w7hycmUgYW5kZWwsIGVubiBob3MgS2FybcO4eSBvZyBIYXVnZXN1bmQgaHZvciBwcmltw6ZybsOmcmluZ2VuZSBrdW4gdXRnasO4cmUgZW4gbGl0ZW4gYW5kZWwuCgojIyMgU3lzc2Vsc2V0dGluZ3N1dHZpa2xpbmdlbiBmb3IgdWxpa2UgbsOmcmluZ2VyIGkgdWxpa2Uga29tbXVuZXIgb2cgZm9yIHJlZ2lvbmVuIHNhbWxldC4KCkRldCBlciByZWxhdGl2dCBzdG9yZSBrb21tdW5ldmlzZSBmb3Jza2plbGxlciBpIG7DpnJpbmdzc3RydWt0dXJlbi4KUm9nYWxhbmQgaGFyIGVuIGZvcmhvbGRzdmlzIGVuc2lkaWcgbsOmcmluZ3NzdHJ1a3R1ciwgb2xqZSBvZyBnYXNzIGVyIGRvbWluZXJlbmRlLgpGeWxrZXQgZXIgc3V2ZXJlbnQgZG9taW5lcmVuZGUgZm9yIGZvc3NpbCBlbmVyZ2kuCkRlIGhhciBmb3Igw7h2cmlnIGRlIHNpc3RlIMOlcmVuZSBzYXRzZXQgcMOlIGV0IGVuIG1lciBkaWZmZXJlbnNpZXJ0IG7DpnJpbmdzc3RydWt0dXIgb2cgbsOmcmluZ3NsaXYgdmVkIMOlIHNhdHNlIHDDpSBoZWxzZSwgSUtUIG9nIGZvcm55YmFyIGVuZXJnaS4KCkkgdsOlcmUgbW9kZWxsZXIsIGVyIHNhdHNpbmdlbiBww6UgaGVsc2UgZGVuIG1lc3QgdHlkZWxpZ2UuCkF2IHJlbnQgdGVrbmlza2UgZ3J1bm5lciBlciBkZXQgdmFuc2tlbGlnIMOlIHNlIHV0dmlrbGluZ2VuIGkgZW5rZWx0ZSBuw6ZyaW5nZXIgc29tIHV0Z2rDuHIgc23DpSBhbmRlbGVyLCBww6UgZ3J1bm4gYXYgc2thbGFlbiBzb20gZXIgYmVueXR0ZXQuClRpbCB0cm9zcyBmb3IgZGV0dGUsIGthbiBtYW4gc2UgYXQgbsOmcmluZ3NzdHJ1a3R1cmVuIGkgcmVnaW9uZW4gc2FtbGV0IGdlbmVyZWx0IHNldHQgaGFyIGVuZHJldCBzZWcgbGl0ZS4KClJvZ2FsYW5kIGhhciBnb2RlIGpvcmRicnVrc211bGlnaGV0ZXIsIG1lbiBpIEZpZy4KMjogSGF1Z2FsYW5kZXQgc2VyIHZpIGVuIG5lZGdhbmcgaSBzeXNzZWxzZXR0aW5nZW4gZGUgc2lzdGUgdGnDpXJlbmUsIG1lbnMgZGV0IGVyIGVuIG1hcmdpbmFsIMO4a25pbmcgaSBTdW5uaG9yZGFsYW5kLCBqZi4KRmlnIDkuCkkgRmlnLgoxMjogc2VyIHZpIGF0IFR5c25lcyBoYXIgaGF0dCBlbiBtYXJrYW50IMO4a25pbmcgaSBwcmltw6ZybsOmcmluZ2VuLCByZWxhdGl2dCBzZXR0LgoKVW5pdmVyc2l0ZXRzLSBvZyBow7hnc2tvbGVzZWt0b3JlbiBlciBsaXRlbiBpIFJvZ2FsYW5kLCBvZyBkZW4gYmVzdMOlciBmb3IgZGV0IGbDuHJzdGUgYXYgVW5pdmVyc2l0ZXRldCBpIFN0YXZhbmdlciAoVWlTKSBvZyBIw7hnc2t1bGVuIHDDpSBWZXN0bGFuZGV0IChIVkwpIG1lZCBjYW1wdXMgSGF1Z2VzdW5kLgoKSGF1Z2FsYW5kIFZla3N0LCBzb20gZXIgZWlnZC9kcmV2ZXQgYXYgSGF1Z2FsYW5kc3JlZ2lvbmVuIGVyIGkgc3Bpc3NlbiBww6Ugw6UgbGVnZ2UgdGlsIHJldHRlIGZvciDDpSBldGFibGVyZSBueSBpbmR1c3RyaSBzYW10IGFuZHJlIGFyYmVpZHNwbGFzc2VyIGkgcmVnaW9uZW4uCgpJIGhlbHNlc2VrdG9yZW4gZXIgU3RhdmFuZ2VyIHVuaXZlcnNpdGV0c3N5a2VodXMgKFN1Uykgc2VudHJhbHQuCgojIyBTdW5uaG9yZGxhbmQKClZpZGVyZSDDuG5za2VyIHZpIMOlIHNlIHDDpSBkZW4gc2FtbWUgdXR2aWtsaW5nZW4sIG1lbiBkZW5uZSBnYW5nZW4gaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4uCgpgYGB7ciBBcmJlaWRzc3RlZF9TdW5uaG9yZGxhbmRfMX0Kc3VuX2FyYiAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDc6IFN1bm5ob3JkYWxhbmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCkhlciB2aXNlciBmaWd1ciA3IHV0dmlrbGluZ2VuIHRpbCBkZW4gdG90YWxlIHN1bW1lbiBhdiBhbnNhdHRlIGkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGZyYSAyMDA4IHRpbCAyMDIwLgpTdW5uaG9yZGFsYW5kIGhhciBpIDIwMjAgaSB1bmRlcmthbnQgYXYgMjUgNTAwIGFuc2F0dGUuClZpIHNlciB1dCBpZnLDpSBmaWd1cmVuIGF0IFN1bm5ob3JkbGFuZHNyZWdpb25lbiBoYWRkZSBlaW4gbWFya2FudCB2ZWtzdCBpZnLDpSAyMDA4IHRpbCAyMDE0IG1lZCBwZXJpb2RhciBtZWQgc3ZhayBuZWRnYW5nLgpGcmEgMjAxNCBoYXIgZGV0IHbDpnJ0IGVuIHJlZHVrc2pvbiBpIHRvdGFsdCBhbnRhbGwgYW5zYXR0ZS4KCmBgYHtyIEFyYmVpZHNzdGVkX1N1bm5ob3JkbGFuZF8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjExLCA0NjEyLCA0NjEzLCA0NjE0LCA0NjE1LCA0NjE2LCA0NjE3KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gODogU3VubmhvcmRsYW5kIiwgeCA9ICLDhXIiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgOCB2aXNlciB1dHZpa2xpbmdlbiBhdiB0b3RhbHQgYW5zYXR0ZSBpIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBww6Uga29tbXVuZW5pdsOlIGkgaGVsZSByZWdpb25lbiBmcmEgMjAwOCB0aWwgMjAyMC4KRGVubmUgZmlndXJlbiBnaXIgb3NzIGVuIG92ZXJzaWt0LCBtZW4gZXIgaWtrZSBoZWlsdCBicnVrZXJ2ZW5uZWxpZy4KVmkgbGFnZXIgZGVybWVkIGVuIG1lciBvdmVyc2lrdGxpZyBmaWd1ciwgamYuCmZpZ3VyIDkgJiAxMC4KCmBgYHtyIHN1bl9hcmJfbG9uZ30Kc3VuX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX1N1bm5ob3JkbGFuZF8zX1N0w7hyc3RlX0FyYmVpZHN0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIkt2aW5uaGVyYWQiLCAiU3RvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gOTogU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX1N1bm5ob3JkbGFuZF80X01pbnN0ZV9BcmJlaWRzdGVkfQpzdW5fYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiRml0amFyIiwgIlN2ZWlvIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxMDogU3VubmhvcmRsYW5kOiBFdG5lLCBGaXRoYXIsIFN2ZWlvIG9nIFR5c25lcyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKClZpIHNlciBoZXIgdXQgaWZyYSBmaWd1ciA5IG9nIDEwIHV0dmlrbGluZ2VuIGZvciBodmVyIGVua2VsdCBrb21tdW5lIGkgU3VubmhvcmRsYW5kIHRvdGFsdCBzZXR0LCBvZyBoZXIgc2VyIHZpIG15ZSB0eWRsaWdlcmUgdXR2aWtsaW5nZW4gZnJhIDIwMDggdGlsIDIwMjAuCkVuIGthbiBzZSBoZXIgYXQgS3Zpbm5oZXJhZCwgRXRuZSBvZyBGaXRqYXIgaGFyIGhhdHQgZW4gcmVkdWtzam9uIGkgdG90YWx0IGFuc2F0dGUsIG1lbnMgVHlzbmVzIG9nIFN2ZWlvIGhhciBoYXR0IGVpbiBrcmFmdGlnIHZla3N0LgpFbiBpbnRlcmVzc2FudCBiZW1lcmtpbmcgZXIgU3RvcmQgaSAyMDE0IG9nIEt2aW5uaGVyYWQgZnJhIDIwMDggdGlsIDIwMTcuCgpGb3Igw6UgZsOlIGV0IGJlZHJlIG92ZXJzaWt0IG92ZXIgdXR2aWtsaW5nZW4gaSBrb21tdW5lbiDDuG5za2VyIHZpIMOlIHNlIHDDpSBkZSA2IG1lc3QgcmVsZXZhbnRlIG7DpnJpbmdlbmUgaSBodmVyIGtvbW11bmUuCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQXJiZWlkc3N0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIlN0b3JkIiwgIkt2aW5uaGVyYWQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxMTogU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzRfTWluc3RlX0FyYmVpZHNzdGVkfQpzdW5fYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiU3ZlaW8iLCAiRml0amFyIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDEyOiBTdW5uaG9yZGxhbmQ6IEV0bmUsIEZpdGphciwgU3ZlaW8gb2cgVHlzbmVzIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkZpZ3VyIDExIG9nIDEyIHZpc2VyIGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZSBpIGh2ZXIgZW5rZWx0IGtvbW11bmUgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZnJhIDIwMDggdGlsIDIwMjAuCgpFbiBzZXIgdXQgaWZyYSBmaWd1ciAxMSBhdCBpIGRlIHRyZSBzdMO4cnN0ZSBrb21tdW5lbmUsICpCw7htbG8qLCAqS3Zpbm5oZXJhZCogb2cgKlN0b3JkKiBzw6UgaGFyIGRlIGFsbGUgaGF0dCBlbiByZWR1a3Nqb24gaSBpbmR1c3RyaWVuLCBzYW10aWRpZyBzb20gZGUgaGFyIGhhdHQgZW4gdmVrc3QgaSBoZWxzZS0gb2cgc29zaWFsdGplbmVzdGVyLgpUeXNuZXMgaGFyIHbDpnJ0IHN0YWJpbCBuw6VyIGRldCBrb21tZXIgdGlsIGluZHVzdHJpLCBtZW4gaGFyIHNldHQgZWluIG1hcmthbnQgdmVrc3QgaSBwcmltw6ZybsOmcmluZ2VuIChKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2UpLgoKIyMjIFN5c3NlbHNldHRpbmdzdXR2aWtsaW5nZW4gZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyIG9nIGZvciByZWdpb25lbiBzYW1sZXQuCgpEZXQgZsO4cnN0ZSBiZW1lcmtlbHNlc3ZlcmRpZ2UgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZXIgZGVuIG1hcmthbnRlIHJlZHVrc2pvbmVuIGkgaW5kdXN0cmkgaSBTdG9yZCBrb21tdW5lIGkgMjAxNCwgc2FtdCBLdmlubmhlcmFkIGZyYSAyMDA4LgpEZXR0ZSBzdGVtbWVyIG92ZXJlbnMgbWVkIHRvIGhlbmRlbHNlci4KRGVuIGbDuHJzdGUgZXIgb2xqZWtuZWtrZW4gaSAyMDE0IHNvbSBtZWRmw7hydGUgYXQgYmwuYS4KQWtlciBTdG9yZCBBUyBzb20gZXIgYXZoZW5naWcgYXYgT2xqZS1pbmR1c3RyaWVuIG3DpXR0ZSBwZXJtaXRlcmUuCgpTdG9yZCBlciBlbiBrb21tdW5lIHNvbSBoYXIgbXllIG9mZnNob3JlIGluZHVzdHJpLgpJIDIwMDgvMjAwOSBzw6Ugc3Rlbmd0ZSBTw7hyLU5vcmdlIEFsdW1pbml1bSAiQi1IYWxsZW4iIHNvbSBtZWRmw7hydGUgNTAlIHJlZHVrc2pvbiBpIHByb2R1a3Nqb24sIG9nIGRlcm1lZCBhbnNhdHRlLgpJbnRlcmVzc2FudCDDpSBiZW1lcmtlIGF0IGkgS3Zpbm5oZXJhZCBzw6UgZXIgYW50YWxsIGluZHVzdHJpYXJiZWlkZXJlIHJlZHVzZXJ0IHNhbXRpZGlnIHNvbSBhbnRhbGwgYW5zYXR0ZSBpIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyIMO4a3QuCkLDuG1sbyBoYXIgb2dzw6Ugc2V0dCBlbiBzdGFiaWwgcmVkdWtzam9uIGkgYW5zYXR0ZSBpbm5lbiBpbmR1c3RyaSwgc2FtdCB2ZWtzdCBpIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyIGZyZW0gdGlsIDIwMTguCgpTZXIgZW4gcMOlIGhlbGUgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGkgc2luIGhlbGhldCwgc8OlIHNlciB2aSBlbiBzdsOmcnQgdHlkZWxpZyB2ZWtzdCBpbm5lbiBIZWxzZS0gb2cgU29zaWFsZXRqZW5lc3Rlciwgb2cgcmVkdWtzam9uIGlubmVuIGluZHVzdHJpIGkgaGVsZSByZWdpb25lbi4KS3Zpbm5oZXJhZCwgVHlzbmVzIG9nIEZpdGphciBoYXIgb3BwbGV2ZCBlaW4gbWFya2FudCB2ZWtzdCBpbm5lbiBwcmltw6ZybsOmcmluZy4KKipLYW4gZGV0IHZlcmUgZWluIGdydW5uIHRpbCBkZXR0ZSBzb20gYnVyZGUgZGlza3V0ZXJhc3Q/PyoqCgojIEZvcnRzZXR0IEhlciAoT0EsIEtIKQoKIyMgSGFyZGFuZ2VyCgpUaWwgc2x1dHQgbcOlIHZpIGdqZXJlIGRldCBzYW1tZSBtZWQgKkhhcmRhbmdlcioKCkkgaGVuaG9sZCB0aWwgb3BwZ2F2ZW5zIGtyYXYgdGlsIGJldHJha3RlciB2aSAqSGFyZGFuZ2VyKiBmw7hyIDIwMTkgc29tIFVsbGVuc3ZhbmctIG9nIE9kZGEga29tbXVuZSBzb20gdG8gc2VwYXJlcnRlIGtvbW11bmVyLgppIDIwMjAgc8OlIGJsZSBVbGxlbnN2YW5nLCBPZGRhIG9nIEpvbmRhbCBzbMOldHQgc2FtbWVuIHRpbCBVbGxlbnN2YW5nLgpEZXR0ZSBmb3JrbGFyZXIgZGVuIHZvbGRzb21tZSDDuGtuaW5nZW4gaSBzeXNzZWxzZXR0aW5nIGkgcmVnaW9uZW4gdmVkIHRpZHNwdW5rdGV0IGZvciBrb21tdW5lc2FtbWVuc2zDpWluZy4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8xfQpoYXJfYXJiICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gw4VyLCB5ID0gVG90YWx0KSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTM6IEhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKQpgYGAKCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMTQ6IEhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhhcl9hcmJfbG9uZ30KaGFyX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhcmRhbmdlcl9BcmJlaWRzdGVkfQpoYXJfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIk9kZGEiLCAiVWxsZW5zdmFuZyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNTogSGFyZGFuZ2VyOiBPZGRhIG9nIFVsbGVuc3ZhbmciLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhcmRhbmdlcl9BcmJlaWRzc3RlZH0KaGFyX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNjogSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCiMgMyBTeXNzZWxzZXR0aW5nIEkgVWxpa2UgTsOmcmluZ2VyLCBFdHRlciBCb3N0ZWQgKE1vZGVsbGVyIFVuZGVyIEFyYmVpZCkKCiMjIEhhdWdhbGFuZGV0CgpgYGB7ciBCb3N0ZWRfSGF1Z2FsYW5kZXRfMX0KaGxkX2JvcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJIYXVnYWxhbmRldCIpKwogIHlsYWIoIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCmBgYHtyIEJvc3RlZF9IYXVnYWxhbmRldF8yfQpzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYygxMTA2LCAxMTM1LCAxMTQ1LCAxMTQ2LCAxMTQ5LCAxMTUxLCAxMTYwKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBgQWxsZSBOw6ZyaW5nZXJgLCAoYW5nbGU9MCkpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgbGFicyh0aXRsZSA9ICJIYXVnYWxhbmRldCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhsZF9ib3NfbG9uZ30KaGxkX2Jvc19sb25nIDwtIHN5c3NlbF9ib3MgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhdWdhbGFuZGV0XzNfU3TDuHJzdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkhhdWdlc3VuZCIsICJLYXJtw7h5IiwgIlZpbmRhZmpvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4geDogSGF1Z2FsYW5kZXQ6IEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfNF9NaW5zdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4geDogSGF1Z2FsYW5kZXQ6IEJva24sIFNhdWRhIFR5c3bDpnIgb2cgVXRzaXJhIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19IYXVnZWxhbmRldF8zX1N0w7hyc3RlX0Jvc3RlZH0KaGxkX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJIYXVnZXN1bmQiLCAiS2FybcO4eSIsICJWaW5kYWZqb3JkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhdWdhbGFuZGV0OiBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfNF9NaW5zdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGF1Z2FsYW5kZXQ6IEJva24sIFNhdWRhLCBUeXN2w6ZyIG9nIFV0c2lyYSIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgojIyBTdW5uaG9yZGxhbmQKCmBgYHtyIEJvc3RlZF9TdW5uaG9yZGxhbmRfMX0Kc3VuX2JvcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJTdW5uaG9yZGFsYW5kIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkKYGBgCgpgYGB7ciBCb3N0ZWRfU3VubmhvcmRsYW5kXzJ9CnN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDQ2MTEsIDQ2MTIsIDQ2MTMsIDQ2MTQsIDQ2MTUsIDQ2MTYsIDQ2MTcpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IGBBbGxlIE7DpnJpbmdlcmApKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKSArCiAgIGxhYnModGl0bGUgPSAiU3VubmhvcmRsYW5kIiwgeCA9ICLDhXIiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3Igc3VuX2Jvc19sb25nfQpzdW5fYm9zX2xvbmcgPC0gc3lzc2VsX2JvcyAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQm9zdGVkfQpzdW5fYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkLDuG1sbyIsICJLdmlubmhlcmFkIiwgIlN0b3JkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIHg6IFN1bm5ob3JkbGFuZDogQsO4bWxvLCBLdmlubmhlcmFkIG9nIFN0b3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzRfTWluc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJFdG5lIiwgIkZpdGphciIsICJTdmVpbyIsICJUeXNuZXMiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4geDogU3VubmhvcmRsYW5kOiBFdG5lLCBGaXRoYXIsIFN2ZWlvIG9nIFR5c25lcyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQm9zdGVkfQpzdW5fYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkLDuG1sbyIsICJTdG9yZCIsICJLdmlubmhlcmFkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlN1bm5ob3JkbGFuZDogQsO4bWxvLCBLdmlubmhlcmFkIG9nIFN0b3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfNF9NaW5zdGVfQm9zdGVkfQpzdW5fYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiU3ZlaW8iLCAiRml0amFyIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTdW5uaG9yZGxhbmQ6IEV0bmUsIEZpdGphciwgU3ZlaW8gb2cgVHlzbmVzIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCiMjIEhhcmRhbmdlcgoKYGBge3IgQm9zdGVkX0hhcmRhbmdlcl8xfQpoYXJfYm9zICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gw4VyLCB5ID0gVG90YWx0KSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCmBgYHtyIEJvc3RlZF9IYXJkYW5nZXJfMn0Kc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lIGMoNDYxOCwgMTIyOCkpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gYEFsbGUgTsOmcmluZ2VyYCkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBrbmF2biwgY29sb3VyID0ga25hdm4pKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCcjMTExMTExJywnIzA1NDk4NycpKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhzZXEoMi4wLCAyLCBieSA9IC0wLjEpKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpICsKICAgbGFicyh0aXRsZSA9ICJIYXJkYW5nZXIiLCB4ID0gIsOFciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBoYXJfYm9zX2xvbmd9Cmhhcl9ib3NfbG9uZyA8LSBzeXNzZWxfYm9zICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBgQWxsZSBOw6ZyaW5nZXJgOlVvcHBnaXR0LAogICAgbmFtZXNfdG8gPSAiTsOmcmluZyIsCiAgICB2YWx1ZXNfdG8gPSAiQW5zYXR0ZSIpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9IYXJkYW5nZXJfQm9zdGVkfQpoYXJfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIk9kZGEiLCAiVWxsZW5zdmFuZyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiB4OiBIYXJkYW5nZXI6IE9kZGEgb2cgVWxsZW5zdmFuZyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGFyZGFuZ2VyX0Jvc3RlZH0KaGFyX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCiMgT3BwZ2F2ZSA0CgpQZW5kbGluZyBlciBldCB2aWt0aWcgYmVncmVwIMOlIGJydWtlIG7DpXIgdmkgc25ha2tlciBvbSByZWdpb25hbCB1dHZpa2xpbmcuCkRlIHVsaWtlIGtvbW11bmVuZSBlbGxlciByZWdpb25lbmUga2FuIGhhIHVsaWtlIGJlaG92LgpEZSBhbGxlciBmbGVzdGUga29tbXVuZXIgaGFyIGZvciBsaXRlIGFyYmVpZHNwbGFzc2VyIGkgZm9yaG9sZCB0aWwgYW50YWxsIGFyYmVpZGVuZS4KRGV0IHZpbCBzaSBhdCBkZSBmbGVzdGUgcGxhc3NlciBlciBkZSBhdmhlbmdpZ2UgYXYgw6UgcGVuZGxlIHRpbCBhbmRyZSBwbGFzc2VyLgpEZXQga2FuIHbDpnJlIGFuZHJlIGtvbW11bmVyIGkgc2FtbWUgcmVnaW9uIGVsbGVyIGFuZHJlIHJlZ2lvbmVyLgpEZXQgZmlubmVzIG9nc8OlIGJlZ3JlcGV0IG5ldHRvIGlubnBlbmRsaW5nIHNvbSBiZXR5ciBhdCBub2VuIGtvbW11bmVyIGVsbGVyIHJlZ2lvbmVyIGhhciBmbGVyZSBhcmJlaWRzcGxhc3NlciB0aWxnamVuZ2VsaWdlIGVubiBkZSBoYXIgZm9sayB0aWwgw6Ugam9iYmUgZGVyIGlubmFkIGkga29tbXVuZW4uClZpIHNrYWwgc2UgcMOlIGlubnBlbmRsaW5nIG9nIHV0cGVuZGxpbmcgc29tIHZpbCBrdW5uZSBmb3J0ZWxsZSBvc3MgaSBodmlsa2VuIGdyYWQgZXQgc3RlZCBlciBpbnRlZ3JlcnQgaSBldCBzdMO4cnJlIGFyYmVpZHNtYXJrZWQgPGh0dHBzOi8vcmVnaW9uYWxhbmFseXNlLm5vL3JhcHBvcnQvMzAwNC8xLzQ+LgoKVmkgaGFyIGxhZ2V0IGVuIHRhYmVsbCBzb20gdGFyIGZvciBzZWcgcmVnaW9uZW4gSGF1Z2FsYW5kZXQuCkhlciBrYW4gdmkgc2tpbGxlIGRlIGZvcnNramVsbGlnZSBrb21tdW5lbmUgb2cgc2UgaHZvciBhbmRlbGVuIGF2IGlubnBlbmRsaW5nIG9nIHV0cGVuZGxpbmcgZXIgc3TDuHJzdCBlbGxlciBtaW5zdC4KClZpIGthbiBzZSBww6UgS2FybcO4eSBzb20gZXQgZWtzZW1wZWwgbsOlciBkZXQgZ2plbGRlciBpbm5wZW5kbGluZyBvZyB1dHBlbmRsaW5nLgpJIEthcm3DuHkga29tbXVuZSBlciBkZXQgMTE2Mzcgc3R5a2sgc29tIGpvYmJlciBpIGVnZW4ga29tbXVuZSwgbWVucyA1ODg4IHBlbmRsZXIgdGlsIGFuZHJlIGtvbW11bmVyIGkgcmVnaW9uZW4uCkhlcmF2IHBlbmRsZXIgNDkxNiBwZXJzb25lciB0aWwgSGF1Z2VzdW5kLCA5IHBlbmRsZXIgdGlsIFNhdWRhLCAzMSBwZW5kbGVyIHRpbCBCb2tuLCA3MTIgdGlsIFR5c3bDpnIsIDIxOCB0aWwgVmluZGFmam9yZCBvZyAyIHBlcnNvbmVyIHBlbmRsZXIgdGlsIFV0c2lyYS4KTsOlciBkZXQga29tbWVyIHRpbCBpbm5wZW5kbGluZyBrYW4gdmkgc2UgYXQgZGV0IHRpbCBzYW1tZW4gZXIgMzM4NCBzb20gcGVuZGxlciB0aWwgS2FybcO4eSBmcmEgSGF1Z2xhbmRzcmVnaW9uZW4uCkRlbiBzdMO4cnN0ZSBhbmRlbGVuIGZyYSBzYW1tZSByZWdpb24gc29tIHBlbmRsZXIgdGlsIEthcm3DuHkgZXIgSGF1Z2VzdW5kLgpWaSBrYW4gc2UgZnJhIHRhYmVsbGVuIGF0IGRldCBlciAyNTg2IHN0eWtrZXIgc29tIHBlbmRsZXIgZnJhIEhhdWdlc3VuZCB0aWwgS2FybcO4eS4KClDDpSBVdHNpcmEgc29tIGhhciBlbiBtaW5kcmUgYmVmb2xrbmluZyBzZXIgdmkgYXQgODUgam9iYmVyIGkgaGplbWtvbW11bmVuLCBtZW5zIDkgc3RrIHBlbmRsZXIgdGlsIGFuZHJlIGtvbW11bmUgaSByZWdpb25lbiwgaGVuaG9sZHN2aXMgdGlsIEhhdWdlc3VuZCwgVHlzdsOmciBvZyBLYXJtw7h5LgoKUMOlIEhhdWdhbGFuZGV0IGthbiB2aSBzZQoKYGBge3J9CiMgZm9yIGlra2Ugw6Ugw7hkZWxlZ2dlIGhnbF9QZW5kbGluZwp0bXAgPC0gaGdsX1BlbmRsaW5nCmBgYAoKCmBgYHtyfQpuZXdfbmFtZXMgPC0gdG1wICU+JSAKICAjIEJva29tbXVlbj8/PwogIHNlbGVjdCgtQm9rb21tdWVuKSAlPiUgCiAgbmFtZXMoKSAlPiUgCiAgc3RyX3N1YihzdGFydCA9IC00TCwgZW5kID0gLTFMKSAlPiUgCiAgcGFzdGUoImsiLCAuLCBzZXAgPSAiXyIpICU+JSAKICAjIHJldHRlciBza3JpdmVmZWlsCiAgYygiQm9rb21tdW5lIiwgLikgCgpuYW1lcyh0bXApIDwtIG5ld19uYW1lcwoKYGBgCgoKYGBge3IgUGVuZGxpbmcgcMOlIEhhdWdhbGFuZGV0fQp0bXAgJT4lIAogIGthYmxlKCkKYGBgCgpJIFN1bm5ob3JkYWxhbmQgc2VyIGRldCBzbGlrIHV0IHByIDIwMjAKCmBgYHtyfQp0bXAgPC0gc3VuX1BlbmRsaW5nCmBgYAoKCmBgYHtyfQpuZXdfbmFtZXMgPC0gdG1wICU+JSAKICAjIEJva29tbXVlbj8/PwogIHNlbGVjdCgtQm9rb21tdWVuKSAlPiUgCiAgbmFtZXMoKSAlPiUgCiAgc3RyX3N1YihzdGFydCA9IC00TCwgZW5kID0gLTFMKSAlPiUgCiAgcGFzdGUoImsiLCAuLCBzZXAgPSAiXyIpICU+JSAKICAjIHJldHRlciBza3JpdmVmZWlsCiAgYygiQm9rb21tdW5lIiwgLikgCgpuYW1lcyh0bXApIDwtIG5ld19uYW1lcwpgYGAKCgpgYGB7ciBQZW5kbGluZyBpIFN1bm5ob3JkbGFuZH0KdG1wICU+JSAKICBrYWJsZSgpCmBgYAoKLSAgIAoKYGBge3Igc2lzdGV9CiMgU2lzdGUKYGBgCgotICAgCg==
=======
LS0tCnRpdGxlOiAiQXJiZWlkc2tyYXYgdsOlcmVuIDIwMjIiCmF1dGhvcjoKLSBLZXZpbiBIYQotIE9sYSBBbmRyZSBPbG9mc3NvbgotIEFubiBFbGlzYWJldGggSmFjb2JzZW4KLSBIZWlkaSBNYXJpZSBSb2xmc25lcwotIERhbmllbCBLYXJzdGFkCi0gSGVucmlldHRlIEhhbnNlbgotIFN1c2FubiBCaXJrZWxhbmQgU2l2ZXJ0c2VuCi0gVmlsZGUgSGF1Z2xhbmQKc3VidGl0bGU6IE1TQjEwNiwgQW52ZW5kdCBieS0gb2cgcmVnaW9uYWzDuGtvbm9taQpvdXRwdXQ6CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKbGFuZzogbm8tTkIKZWRpdG9yX29wdGlvbnM6IAogIG1hcmtkb3duOiAKICAgIHdyYXA6IHNlbnRlbmNlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeShyZWFkcikKICBsaWJyYXJ5KGdncGxvdDIpCiAgbGlicmFyeShrbml0cikKICBsaWJyYXJ5KHZpcmlkaXMpCiAgbGlicmFyeSh0aWR5dmVyc2UpCiAgfSkKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89RkFMU0UsIGluY2x1ZGUgPSBUUlVFKQpgYGAKCiMgUm9tbGlnZSBmb3Jza2plbGxlciBpIG7DpnJpbmdzc3RydWt0dXIsIHZpcmtuaW5nZXIgYXYgZWtzb2dlbmUgc2pva2sgaSBiYXNpc3N5c3NlbHNldHRpbmdlbiwgb2cgbG9rYWxlIGZvcnNramVsbGVyIEkgc3lzc2Vsc2V0dGluZ3N2ZWtzdC4KCkkgZGVubmUgb3BwZ2F2ZW4gdmlsIHZpIHNlIHDDpSBuw6ZyaW5nc3N0cnVrdHVyZXIgcMOlIEhhdWdhbGFuZGV0LCBTdW5uaG9yZGxhbmQgb2cgSGFyZGFuZ2VyLgoKUHJvYmxlbXN0aWxsaW5nZXIgb2cgYmVyZWduaW5nZXIgdmkgdmlsIHNlIG7DpnJtZXJlIHDDpQoKLSAgIEJlc2tyaXZlIHNpdHVhc2pvbmVuIHNsaWsgZGVuIGVyIGZvciAyMDIwLCBvZyBmb3IgdXR2aWtsaW5nZW4gb3ZlciB0aWQuCi0gICBTeXNzZWxzZXR0aW5nc3V0dmlrbGluZ2VuIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciBvZyBmb3IgcmVnaW9uZW4gc2FtbGV0LgotICAgQW5kZWxlbiBhdiBzeXNzZWxzZXR0aW5nZW4gaW5uZW5mb3IgZW5rZWx0bsOmcmluZ2VyLCBvZyBzYW1tZW5saWduZSBzaXR1YXNqb25lbiBvZyB1dHZpa2xpbmdlbiBmb3IgbG9rYWxlIGtvbW11bmVyIG9nIGxva2FsIHJlZ2lvbiBtZWQgZGV0IHNvbSBnamVsZGVyIGZvciBuYXNqb25lbiBzYW1sZXQuCi0gICBCZXJlZ25lIGxva2FsaXNlcmluZ3Nrdm90aWVudGVyIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciwgb2cgZm9yIHJlZ2lvbmVuKGUpIHNhbWxldC4KLSAgIEJlcmVnbmUgdWxpa2UgYWdncmVnZXJpbmdzbml2w6VlciBhdiBuw6ZyaW5nZXIgb2cgZ2VvZ3JhZmksIGlkZW50aWZpc2VyIG11bGlnZSBrbHluZ2VyIGJhc2VydCBww6UgdmVyZGllbmUgZm9yIGxva2FsaXNlcmluZ3Nrdm90aWVudGVuZS4KLSAgIEdqw7hyZSBlbiB2dXJkZXJpbmcgYXYgaHZvciBrb25zZW50cmVydC9zcHJlZHQgZW4gbsOmcmluZyBlciBmb3JkZWx0IG1lbGxvbSBrb21tdW5lbmUgaSByZWdpb25lbiwgYmFzZXJ0IHDDpSBiZXJlZ25pbmdlciBhdiBkZW4gcm9tbGlnZSBHaW5pLWluZGVrc2VuLgotICAgVnVyZGVyZSBvbSBzYW1tZW5saWduaW5nc2dydW5ubGFnZXQgYsO4ciB2w6ZyZSBzYW1sZXQgc3lzc2Vsc2V0dGluZyBpIHJlZ2lvbmVuLCBlbGxlciBzYW1sZXQgc3lzc2Vsc2V0dGluZyBhdiBuYXNqb25lbiwgb2cgZmlubmUgdXQgaHZpbGtlbiByb2xsZSBkZXQgc3BpbGxlciBvbSBlbiBicnVrZXIgcmVnaW9uYWxlIGVsbGVyIG5hc2pvbmFsZSBhbnNsYWcgZm9yIHNhbWxldCBzeXNzZWxzZXR0aW5nLgotICAgRmlubmUgdXQgb20gbsOmcmluZ3NzdHJ1a3R1cmVuIGkgcmVnaW9uZW4gaGFyIGJsaXR0IG1lciBlbGxlciBtaW5kcmUgZGl2ZXJzaWZpc2VydCwgbWFuZ2ZvbGRpZywgb3ZlciB0aWQuCi0gICBCZXJlZ25lIGVuIHJlZ2lvbmFsIG1hbmdmb2xkLWluZGVrcyBvZyBmaW5uZSB1dCBodm9yZGFuIHZlcmRpZW5lIHDDpSBlbiBzbGlrIGluZGVrcyBlciBlbmRyZXQgb3ZlciB0aWQuCi0gICBWdXJkZXJlIG9tIHN5c3NlbHNldHRpbmdzYW5kZWxlbmUgc2thbCBzYW1tZW5saWduZXMgbWVkIG5hc2pvbmFsZSBlbGxlciByZWdpb25hbGUgYW5kZWxlciBmb3IgZGUgdWxpa2UgbsOmcmluZ2VuZQotICAgR2plbnRhIGJlcmVnbmluZ2VyIGZvciBhbmRlbGVyIGF2IGFyYmVpZHN0YWtlcmUgaSB1bGlrZSBuw6ZyaW5nZXIsIGxva2FsaXNlcmluZ3Nrdm90aWVudGVyLCBkZW4gcm9tbGlnZSBHaW5pLSBrb2VmZmlzaWVudGVuIG9nIG3DpWxldCBmb3IgbWFuZ2ZvbGQgYXYgbsOmcmluZ2VyLCBtZWQgdXRnYW5nc3B1bmt0IGkgZGF0YSBzcGVzaWZpc2VydCBldHRlciBhcmJlaWRzdGFrZXJuZXMgYm9zdGVkLgotICAgU2FtbWVubGlnbmUgcmVzdWx0YXRlbmUgZm9yIGRhdGEgZXR0ZXIgYXJiZWlkc3N0ZWQsIG9nIGtvbW1lbnRlciBodmlsa2VuIGluZm9ybWFzam9uIHJlc3VsdGF0ZW5lIGdpciBvbSByb21saWcgbW9iaWxpdGV0IGkgYXJiZWlkc21hcmtlZGV0LgotICAgR2kgZW4ga29ydCBvdmVyc2lrdCBvdmVyIHBlbmRsZXJzdHLDuG1tZXIgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuCi0gICBCZXJlZ25lIG9nIHByZXNlbnRlcmUgYW5kZWxlciBhdiBhcmJlaWRzdGFrZXJlIG1lZCBib3N0ZWQgaSBlbiBrb21tdW5lIHNvbSBoYXIgYXJiZWlkc3N0ZWQgaSBhbmRyZSBrb21tdW5lciwgb2cgZ2rDuHIgZGV0IHNhbW1lIGZvciBhbmRlbGVuIGF2IGpvYmJlbmUgaSBlbiBrb21tdW5lIHNvbSBlciBiZXNhdHQgYXYgYXJiZWlkc3Rha2VyZSBmcmEgYW5kcmUga29tbXVuZXIuCi0gICBEaXNrdXRlcmUgZm9yc2tqZWxsZXIgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuLCBvZyBkcsO4ZnQgdXR2aWtsaW5nZW4gb3ZlciB0aWQgZm9yIHVsaWtlIGtvbW11bmVyCi0gICBCZXJlZ25lIG9nIHByZXNlbnRlcmUgYW5kZWxlbiBhdiBhcmJlaWRzdGFrZXJlIHNvbSBib3Igb2cgam9iYmVyIGlubmVuZm9yIHNhbW1lIGtvbW11bmUuIFNlIG9tIGRldCBlciBzeXN0ZW1hdGlza2UgZm9yc2tqZWxsZXIgc2V0dCBpIGZvcmhvbGQgdGlsIHNlbnRyYWxpdGV0IG9nIHRpbGdqZW5nZWxpZ2hldCBpIGRldCBsb2thbGUgYXJiZWlkc21hcmtlZGV0LiBPZyBvbSBkZXQgZXIgYmVzdGVtdGUgdHJlbmRlciBpIHV0dmlrbGluZ2VuIGZvciB1bGlrZSBrb21tdW5lci4KLSAgIEJydWtlIGJlcmVnbmluZ2VuZSBhdiBsb2thbGlzZXJpbmdrdm90aWVudGVyIHRpbCDDpSBkZWxlIG7DpnJpbmdlbmUgaW5uIGkgbG9rYWwtIG9nIGJhc2lzbsOmcmluZ2VyCi0gICBGb3JtdWxlcmUgZW4gw7hrb25vbWlzayBiYXNlbW9kZWxsIG9nIGJlcmVnbmUgw7hrb25vbWlza2UgYmFzZW11bGlwbGlrYXRvcmVyIGZvciBlbmtlbHRrb21tdW5lciBvZyByZWdpb24oZXIpLgotICAgVnVyZGVyZSBsb2thbGUgdmlya25pbmdlciBhdiBhbHRlcm5hdGl2ZSBsb2thbGlzZXJpbmdlciBpIE9kZGEsIEh1c25lcyBvZyBMZWlydmlrCi0gICBEcsO4ZnRlIHZpcmtuaW5nZXIgYXYgZXQgc2xpa3QgcG9zaXRpdnQgZWtzb2dlbnQgc2pva2sgZm9yIGRlbiBsb2thbGUgw7hrb25vbWllbiBnamVubm9tIGJydWsgYXYgZW4gYmFzZW1vZGVsbAotICAgRmlubmUgdXQgaHZvcmRhbiB2aXJrbmluZ2VuZSBldmVudHVlbHQgc3ByZXMgdGlsIGFuZHJlIGtvbW11bmVyIGkgcmVnaW9uZW4gb2cgaHZvcmRhbiBlbiBrYW4gYnJ1a2UgZGF0YSBmb3IgcGVuZGxlc3Ryw7htbWVyIHRpbCDDpSBwcmVkaWtlcmUgdmlya25pbmdlciBww6Ugc3lzc2Vsc2V0dGluZ2VuIGkgdWxpa2Uga29tbXVuZXIuCi0gICBTYW1tZW5saWduZSBkaXNzZSBwcmVkaWtzam9uZW5lIG1lZCBkZSB2aSBmw6VyIG7DpXIgdmkgZ2plbm5vbWbDuHJlciBhbmFseXNlbiBww6UgcmVnaW9uYWx0IG5pdsOlLgotICAgR2kgZW4gc2hpZnQtc2hhcmUgYW5hbHlzZSBpIGVuIGRpc2t1c2pvbiBhdiBmb3Jza2plbGxlciBpIHZla3N0IGZvciBla3NlbXBlbCBtZWxsb20gaW5kcmUsIG1pZHRyZSBvZyB5dHJlIGRlbGVyIGF2IHJlZ2lvbmVuLCBlbGxlciBldmVudHVlbHQgb21yw6VkZXIva29tbXVuZXIgc29tIGhhciBoYXR0IHN0ZXJrIG9nIHN2YWsgYmVmb2xrbmluZ3N1dHZpa2xpbmcuCgojIyBPdmVyc2lrdCBvdmVyIGJlZm9sa25pbmdlbmUgaSByZWdpb25lbmUKCiMjIyBIYXVnYWxhbmRldApIYXVnYWxhbmRldCBiZXN0w6VyIGF2IGtvbW11bmVuZSBCb2tuICg4NTIpLCBIYXVnZXN1bmQgKDM3MzU3KSwgS2FybcO4eSAoNDIxODYpLCBTYXVkYSAoNDU5NSksIFR5c3bDpnIoMTEwNjUpLCBVdHNpcmEoMTk4KSBvZyBWaW5kYWZqb3JkKDg3MTQpLiB0aWxzYW1tZW4gYm9yIGRldCAxMDQ5NjcgcGVyc29uZXIgaSBkZW5uZSByZWdpb25lbi4gaSB0aWRzcGVyaW9kZW4gdmkgaGFyIGhlbnRldCBpbm4gZGF0YSBoYXIgZGV0IHZlcnQga29tbXVuZXNhbW1lbnNsw6VpbmcgaSBkZW5uZSByZWdpb25lbi4gRGEgYmxlIMOYbGVuIG9nIHZpbmRhZmpvcmQgc2zDpXR0IGkgc2FtbWVuIHRpbCBlbiBrb21tdW5lIChodm9yZGFuIGhhciB2aSB0YXR0IGhlbnN5biB0aWwgZGV0dGU/Pz8pCgojIyMgU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcKU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcgYmVzdMOlciBhdiBrb21tdW5lbmUgQsO4bWxvKDExOTU3KSwgRXRuZSg0MDYyKSwgRml0amFyKDMxODkpLCBLdmlubmhlcmFkKDEzMDcxKSwgU3RvcmQoMTg3NTkpLCBTdmVpbyg1NzY2KSwgVHlzbmVzKDI4NjkpIG9nIFVsbGVuc3ZhbmcoMTEwNDgpLiBUaWxzYW1tZW4gYm9yIGRldCA3MDcyMSBwZXJzb25lciBpIGRlbm5lIHJlZ2lvbmVuLgoKVGFsbGVuZSBlciBoZW50ZXQgZnJhIFNTQiAwOS4wMS4yMSAoaHR0cHM6Ly93d3cuc3NiLm5vL3N0YXRiYW5rL3RhYmxlLzAxMjIzL3RhYmxlVmlld0xheW91dDEvKSBnamVsZGVyIGZvciA0IGt2YXJ0YWwgMjAyMC4KCmBgYHtyIGNzdl9maWxlcn0Kc3lzc2VsX2FyYiA8LSByZWFkX2NzdigiRGF0YS9zeXNzZWxfYXJiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmhsZF9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvaGxkX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzdW5fYXJiIDwtIHJlYWRfY3N2KCJEYXRhL3N1bl9hcmIuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGFyX2FyYiA8LSByZWFkX2NzdigiRGF0YS9oYXJfYXJiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCnN5c3NlbF9ib3MgPC0gcmVhZF9jc3YoIkRhdGEvc3lzc2VsX2Jvcy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpobGRfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL2hsZF9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKc3VuX2JvcyA8LSByZWFkX2NzdigiRGF0YS9zdW5fYm9zLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmhhcl9ib3MgPC0gcmVhZF9jc3YoIkRhdGEvaGFyX2Jvcy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpQZW5kbGluZyA8LSByZWFkX2NzdigiRGF0YS9QZW5kbGluZy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpoZ2xfUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvaGdsX1BlbmRsaW5nLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCnN1bl9QZW5kbGluZyA8LSByZWFkX2NzdigiRGF0YS9zdW5fUGVuZGxpbmcuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKYGBgCgojIDEgU3lzc2Vsc2V0dGluZyBpIHVsaWtlIG7DpnJpbmdlciwgZXR0ZXIgYXJiZWlkc3N0ZWQKCiMjIEhhdWdhbGFuZGV0CgpGw7hyc3RlIHJlZ2lvbmVuIHZpIHZlbGdlciDDpSBzZSBww6UgZXIgSGF1Z2FsYW5kZXQuIEhlciDDuG5za2VyIHZpIMOlIHNlIHDDpSB1dHZpa2xpbmdlbiBmcmEgMjAwOCB0aWwgMjAyMCwgYXYgYW50YWxsIGFuc2F0dGUgaSBzaW4gaGVsaGV0IGkgcmVnaW9uZW4sIHNhbXQgZGUgNiBtZXN0IHJlbGV2YW50ZSBuw6ZyaW5nZW5lLgoKYGBge3IgQXJiZWlkc3N0ZWRfSGF1Z2FsYW5kZXRfMX0KaGxkX2FyYiAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDE6IEhhdWdhbGFuZGV0IikrCiAgeWxhYigiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKSSAyMDIwIGVyIGRldCBpIHVuZGVya2FudCBhdiA1MCAwMDAgYW5zYXR0ZSBpIGFsbGUgbsOmcmluZ2VyIHDDpSBIYXVnYWxhbmRldC4gQXYgRmlnLiAxIHNlciB2aSBhdCBIYXVnYWxhbmRldCBmaWtrIGVuIG5lZGdhbmcgaSBhbnRhbGwgYW5zYXR0ZSBpIDIwMTUgb2cgMjAxNi4gSSAyMDE3IG9nIDIwMTggYmxlIGRldCB2ZWtzdCwgZnJlbSB0aWwgZGV0IHNudWRkZSBpIDIwMTkgaWdqZW4uCgpgYGB7ciBBcmJlaWRzc3RlZF9IYXVnYWxhbmRldF8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYygxMTA2LCAxMTM1LCAxMTQ1LCAxMTQ2LCAxMTQ5LCAxMTUxLCAxMTYwKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBgQWxsZSBOw6ZyaW5nZXJgLCAoYW5nbGU9MCkpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDI6IEhhdWdhbGFuZGV0IiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKSSBGaWcuIDIgc2VyIHZpIGF0IGZsZXJlIGF2IGtvbW11bmVuZSBww6UgSGF1Z2FsYW5kZXQgaGFyIGhhdHQgbGl0ZW4gYXJiZWlkc3BsYXNzdmVrc3QsIG1lZCB1bm50YWsgYXYgVHlzdsOmciwgVmluZGFmam9yZCBvZyBLYXJtw7h5IGkgZGVuIHNpc3RlIHRpw6Vyc3BlcmlvZGVuLiBWaSBzZXIgZGV0dGUgbWVyIHR5ZGVsaWcgcMOlIGZpZy4gMyBvZyA0LgoKYGBge3IgaGxkX2FyYl9sb25nfQpobGRfYXJiX2xvbmcgPC0gc3lzc2VsX2FyYiAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfM19TdMO4cnN0ZV9BcmJlaWRzdGVkfQpobGRfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkhhdWdlc3VuZCIsICJLYXJtw7h5IiwgIlZpbmRhZmpvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMzogSGF1Z2FsYW5kZXQ6IEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAyKSkgKyAKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9IYXVnYWxhbmRldF80X01pbnN0ZV9BcmJlaWRzdGVkfQpobGRfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gNDogSGF1Z2FsYW5kZXQ6IEJva24sIFNhdWRhIFR5c3bDpnIgb2cgVXRzaXJhIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAyKSkgKyAKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpCmBgYAoKRmlndXIgMyBvZyA0IHZpc2VyIHV0dmlrbGluZ2VuIGF2IGRldCB0b3RhbGUgYW50YWxsIGFuc2F0dGUgaSBhbGxlIG7DpnJpbmdlciBww6Uga29tbXVuYWx0IG5pdsOlLCBpbm5lbmZvciBIYXVnYWxhbmQtcmVnaW9uZW4uCgpJIGRpc3NlIGZpZ3VyZW5lLCBzw6Ugc2VyIHZpIHR5ZGVsaWcgYXQgSGF1Z2VzdW5kIGhhciBoYXR0IHJlZHVrc2pvbiBpIGFudGFsbCBhbnNhdHRlIHRvdGFsdCBzZXR0LCBtZW5zIEthcm3DuHksIFZpbmRhZmpvcmQgb2cgVHlzdsOmciBoYXIgaGF0dCBlbiBtYXJrYW50IHZla3N0IGRlIHNpc3RlIHRpIMOlcmVuZS4gU2lkZW4gSGF1Z2VzdW5kIGhhciBmbGVzdCBhcmJlaWRzcGxhc3NlciBiZXR5ciB1dHZpa2xpbmdlbiBpIEhhdWdlc3VuZCBteWUgZm9yIGRlIHNhbWxlZGUgdGFsbGVuZS4KCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19IYXVnZWxhbmRldF8zX1N0w7hyc3RlX0FyYmVpZHNzdGVkfQpobGRfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkhhdWdlc3VuZCIsICJLYXJtw7h5IiwgIlZpbmRhZmpvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA1OiBIYXVnYWxhbmRldDogSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhdWdlbGFuZGV0XzRfTWluc3RlX0FyYmVpZHNzdGVkfQpobGRfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA2OiBIYXVnYWxhbmRldDogQm9rbiwgU2F1ZGEsIFR5c3bDpnIgb2cgVXRzaXJhIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkZpZ3VyIDUgb2cgNiB2aXNlciB1dHZpa2xpbmdlbiBhdiBkZSA2IG1lc3QgcmVsZXZhbnRlIG7DpnJpbmdlbmUgaSBIYXVnYWxhbmRzcmVnaW9uZW4gcMOlIGtvbW11bmUgbml2w6UuCgpWaSBzZXIgaSBkZSB0cmUgc3TDuHJzdGUga29tbXVuZW5lLCBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZCB1dGdqw7hyIG7DpnJpbmdlbmUgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciBvZyBJbmR1c3RyaSBkZSBzdMO4cnN0ZS4gSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciBoYXIgdm9rc3QgamV2bnQgb2cgdHJ1dHQgZGUgc2lzdGUgdGnDpXJlbmUsIG1lbnMgYW50YWxsIGFuc2F0dGUgaSBpbmR1c3RyaW7DpnJpbmdlbiBoYXIgdmFyaWVydCBmcmEga29tbXVuZSB0aWwga29tbXVuZS4gSSBIYXVnYWxhbmRldCB1dGdqw7hyIHByaW3DpnJuw6ZyaW5nZXIgKGpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSkgZW4gc3TDuHJyZSBhbmRlbCwgZW5uIGhvcyBLYXJtw7h5IG9nIEhhdWdlc3VuZCBodm9yIHByaW3DpnJuw6ZyaW5nZW5lIGt1biB1dGdqw7hyZSBlbiBsaXRlbiBhbmRlbC4KCiMjIyBTeXNzZWxzZXR0aW5nc3V0dmlrbGluZ2VuIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciBvZyBmb3IgcmVnaW9uZW4gc2FtbGV0LiAKCkRldCBlciByZWxhdGl2dCBzdG9yZSBrb21tdW5ldmlzZSBmb3Jza2plbGxlciBpIG7DpnJpbmdzc3RydWt0dXJlbi4KUm9nYWxhbmQgaGFyIGVuIGZvcmhvbGRzdmlzIGVuc2lkaWcgbsOmcmluZ3NzdHJ1a3R1ciwgb2xqZSBvZyBnYXNzIGVyIGRvbWluZXJlbmRlLiBGeWxrZXQgZXIgc3V2ZXJlbnQgZG9taW5lcmVuZGUgZm9yIGZvc3NpbCBlbmVyZ2kuIERlIGhhciBmb3Igw7h2cmlnIGRlIHNpc3RlIMOlcmVuZSBzYXRzZXQgcMOlIGV0IGVuIG1lciBkaWZmZXJlbnNpZXJ0IG7DpnJpbmdzc3RydWt0dXIgb2cgbsOmcmluZ3NsaXYgdmVkIMOlIHNhdHNlIHDDpSBoZWxzZSwgSUtUIG9nIGZvcm55YmFyIGVuZXJnaS4KCkkgdsOlcmUgbW9kZWxsZXIsIGVyIHNhdHNpbmdlbiBww6UgaGVsc2UgZGVuIG1lc3QgdHlkZWxpZ2UuIEF2IHJlbnQgdGVrbmlza2UgZ3J1bm5lciBlciBkZXQgdmFuc2tlbGlnIMOlIHNlIHV0dmlrbGluZ2VuIGkgZW5rZWx0ZSBuw6ZyaW5nZXIgc29tIHV0Z2rDuHIgc23DpSBhbmRlbGVyLCBww6UgZ3J1bm4gYXYgc2thbGFlbiBzb20gZXIgYmVueXR0ZXQuIFRpbCB0cm9zcyBmb3IgZGV0dGUsIGthbiBtYW4gc2UgYXQgbsOmcmluZ3NzdHJ1a3R1cmVuIGkgcmVnaW9uZW4gc2FtbGV0IGdlbmVyZWx0IHNldHQgaGFyIGVuZHJldCBzZWcgbGl0ZS4KClJvZ2FsYW5kIGhhciBnb2RlIGpvcmRicnVrc211bGlnaGV0ZXIsIG1lbiBpIEZpZy4gMjogSGF1Z2FsYW5kZXQgc2VyIHZpIGVuIG5lZGdhbmcgaSBzeXNzZWxzZXR0aW5nZW4gZGUgc2lzdGUgdGnDpXJlbmUsIG1lbnMgZGV0IGVyIGVuIG1hcmdpbmFsIMO4a25pbmcgaSBTdW5uaG9yZGFsYW5kLCBqZi4gRmlnIDkuIEkgRmlnLiAxMjogc2VyIHZpIGF0IFR5c25lcyBoYXIgaGF0dCBlbiBtYXJrYW50IMO4a25pbmcgaSBwcmltw6ZybsOmcmluZ2VuLCByZWxhdGl2dCBzZXR0LgoKVW5pdmVyc2l0ZXRzLSBvZyBow7hnc2tvbGVzZWt0b3JlbiBlciBsaXRlbiBpIFJvZ2FsYW5kLCBvZyBkZW4gYmVzdMOlciBmb3IgZGV0IGbDuHJzdGUgYXYgVW5pdmVyc2l0ZXRldCBpIFN0YXZhbmdlciAoVWlTKSBvZyBIw7hnc2t1bGVuIHDDpSBWZXN0bGFuZGV0IChIVkwpIG1lZCBjYW1wdXMgSGF1Z2VzdW5kLgoKSGF1Z2FsYW5kIFZla3N0LCBzb20gZXIgZWlnZC9kcmV2ZXQgYXYgSGF1Z2FsYW5kc3JlZ2lvbmVuIGVyIGkgc3Bpc3NlbiBww6Ugw6UgbGVnZ2UgdGlsIHJldHRlIGZvciDDpSBldGFibGVyZSBueSBpbmR1c3RyaSBzYW10IGFuZHJlIGFyYmVpZHNwbGFzc2VyIGkgcmVnaW9uZW4uCgpJIGhlbHNlc2VrdG9yZW4gZXIgU3RhdmFuZ2VyIHVuaXZlcnNpdGV0c3N5a2VodXMgKFN1Uykgc2VudHJhbHQuCgojIyBTdW5uaG9yZGxhbmQKClZpZGVyZSDDuG5za2VyIHZpIMOlIHNlIHDDpSBkZW4gc2FtbWUgdXR2aWtsaW5nZW4sIG1lbiBkZW5uZSBnYW5nZW4gaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4uCgpgYGB7ciBBcmJlaWRzc3RlZF9TdW5uaG9yZGxhbmRfMX0Kc3VuX2FyYiAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDc6IFN1bm5ob3JkYWxhbmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCkhlciB2aXNlciBmaWd1ciA3IHV0dmlrbGluZ2VuIHRpbCBkZW4gdG90YWxlIHN1bW1lbiBhdiBhbnNhdHRlIGkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGZyYSAyMDA4IHRpbCAyMDIwLiBTdW5uaG9yZGFsYW5kIGhhciBpIDIwMjAgaSB1bmRlcmthbnQgYXYgMjUgNTAwIGFuc2F0dGUuIFZpIHNlciB1dCBpZnLDpSBmaWd1cmVuIGF0IFN1bm5ob3JkbGFuZHNyZWdpb25lbiBoYWRkZSBlaW4gbWFya2FudCB2ZWtzdCBpZnLDpSAyMDA4IHRpbCAyMDE0IG1lZCBwZXJpb2RhciBtZWQgc3ZhayBuZWRnYW5nLiBGcmEgMjAxNCBoYXIgZGV0IHbDpnJ0IGVuIHJlZHVrc2pvbiBpIHRvdGFsdCBhbnRhbGwgYW5zYXR0ZS4KCmBgYHtyIEFyYmVpZHNzdGVkX1N1bm5ob3JkbGFuZF8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjExLCA0NjEyLCA0NjEzLCA0NjE0LCA0NjE1LCA0NjE2LCA0NjE3KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gODogU3VubmhvcmRsYW5kIiwgeCA9ICLDhXIiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgOCB2aXNlciB1dHZpa2xpbmdlbiBhdiB0b3RhbHQgYW5zYXR0ZSBpIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBww6Uga29tbXVuZW5pdsOlIGkgaGVsZSByZWdpb25lbiBmcmEgMjAwOCB0aWwgMjAyMC4gRGVubmUgZmlndXJlbiBnaXIgb3NzIGVuIG92ZXJzaWt0LCBtZW4gZXIgaWtrZSBoZWlsdCBicnVrZXJ2ZW5uZWxpZy4gVmkgbGFnZXIgZGVybWVkIGVuIG1lciBvdmVyc2lrdGxpZyBmaWd1ciwgamYuIGZpZ3VyIDkgJiAxMC4KCmBgYHtyIHN1bl9hcmJfbG9uZ30Kc3VuX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX1N1bm5ob3JkbGFuZF8zX1N0w7hyc3RlX0FyYmVpZHN0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIkt2aW5uaGVyYWQiLCAiU3RvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gOTogU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX1N1bm5ob3JkbGFuZF80X01pbnN0ZV9BcmJlaWRzdGVkfQpzdW5fYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiRml0amFyIiwgIlN2ZWlvIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxMDogU3VubmhvcmRsYW5kOiBFdG5lLCBGaXRoYXIsIFN2ZWlvIG9nIFR5c25lcyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKClZpIHNlciBoZXIgdXQgaWZyYSBmaWd1ciA5IG9nIDEwIHV0dmlrbGluZ2VuIGZvciBodmVyIGVua2VsdCBrb21tdW5lIGkgU3VubmhvcmRsYW5kIHRvdGFsdCBzZXR0LCBvZyBoZXIgc2VyIHZpIG15ZSB0eWRsaWdlcmUgdXR2aWtsaW5nZW4gZnJhIDIwMDggdGlsIDIwMjAuIEVuIGthbiBzZSBoZXIgYXQgS3Zpbm5oZXJhZCwgRXRuZSBvZyBGaXRqYXIgaGFyIGhhdHQgZW4gcmVkdWtzam9uIGkgdG90YWx0IGFuc2F0dGUsIG1lbnMgVHlzbmVzIG9nIFN2ZWlvIGhhciBoYXR0IGVpbiBrcmFmdGlnIHZla3N0LiBFbiBpbnRlcmVzc2FudCBiZW1lcmtpbmcgZXIgU3RvcmQgaSAyMDE0IG9nIEt2aW5uaGVyYWQgZnJhIDIwMDggdGlsIDIwMTcuCgpGb3Igw6UgZsOlIGV0IGJlZHJlIG92ZXJzaWt0IG92ZXIgdXR2aWtsaW5nZW4gaSBrb21tdW5lbiDDuG5za2VyIHZpIMOlIHNlIHDDpSBkZSA2IG1lc3QgcmVsZXZhbnRlIG7DpnJpbmdlbmUgaSBodmVyIGtvbW11bmUuCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQXJiZWlkc3N0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIlN0b3JkIiwgIkt2aW5uaGVyYWQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxMTogU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzRfTWluc3RlX0FyYmVpZHNzdGVkfQpzdW5fYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiU3ZlaW8iLCAiRml0amFyIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDEyOiBTdW5uaG9yZGxhbmQ6IEV0bmUsIEZpdGphciwgU3ZlaW8gb2cgVHlzbmVzIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkZpZ3VyIDExIG9nIDEyIHZpc2VyIGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZSBpIGh2ZXIgZW5rZWx0IGtvbW11bmUgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZnJhIDIwMDggdGlsIDIwMjAuCgpFbiBzZXIgdXQgaWZyYSBmaWd1ciAxMSBhdCBpIGRlIHRyZSBzdMO4cnN0ZSBrb21tdW5lbmUsICpCw7htbG8qLCAqS3Zpbm5oZXJhZCogb2cgKlN0b3JkKiBzw6UgaGFyIGRlIGFsbGUgaGF0dCBlbiByZWR1a3Nqb24gaSBpbmR1c3RyaWVuLCBzYW10aWRpZyBzb20gZGUgaGFyIGhhdHQgZW4gdmVrc3QgaSBoZWxzZS0gb2cgc29zaWFsdGplbmVzdGVyLiBUeXNuZXMgaGFyIHbDpnJ0IHN0YWJpbCBuw6VyIGRldCBrb21tZXIgdGlsIGluZHVzdHJpLCBtZW4gaGFyIHNldHQgZWluIG1hcmthbnQgdmVrc3QgaSBwcmltw6ZybsOmcmluZ2VuIChKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2UpLgoKIyMjIFN5c3NlbHNldHRpbmdzdXR2aWtsaW5nZW4gZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyIG9nIGZvciByZWdpb25lbiBzYW1sZXQuCgpEZXQgZsO4cnN0ZSBiZW1lcmtlbHNlc3ZlcmRpZ2UgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZXIgZGVuIG1hcmthbnRlIHJlZHVrc2pvbmVuIGkgaW5kdXN0cmkgaSBTdG9yZCBrb21tdW5lIGkgMjAxNCwgc2FtdCBLdmlubmhlcmFkIGZyYSAyMDA4LiBEZXR0ZSBzdGVtbWVyIG92ZXJlbnMgbWVkIHRvIGhlbmRlbHNlci4gRGVuIGbDuHJzdGUgZXIgb2xqZWtuZWtrZW4gaSAyMDE0IHNvbSBtZWRmw7hydGUgYXQgYmwuYS4gQWtlciBTdG9yZCBBUyBzb20gZXIgYXZoZW5naWcgYXYgT2xqZS1pbmR1c3RyaWVuIG3DpXR0ZSBwZXJtaXRlcmUuCgpTdG9yZCBlciBlbiBrb21tdW5lIHNvbSBoYXIgbXllIG9mZnNob3JlIGluZHVzdHJpLiBJIDIwMDgvMjAwOSBzw6Ugc3Rlbmd0ZSBTw7hyLU5vcmdlIEFsdW1pbml1bSAiQi1IYWxsZW4iIHNvbSBtZWRmw7hydGUgNTAlIHJlZHVrc2pvbiBpIHByb2R1a3Nqb24sIG9nIGRlcm1lZCBhbnNhdHRlLiBJbnRlcmVzc2FudCDDpSBiZW1lcmtlIGF0IGkgS3Zpbm5oZXJhZCBzw6UgZXIgYW50YWxsIGluZHVzdHJpYXJiZWlkZXJlIHJlZHVzZXJ0IHNhbXRpZGlnIHNvbSBhbnRhbGwgYW5zYXR0ZSBpIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyIMO4a3QuIELDuG1sbyBoYXIgb2dzw6Ugc2V0dCBlbiBzdGFiaWwgcmVkdWtzam9uIGkgYW5zYXR0ZSBpbm5lbiBpbmR1c3RyaSwgc2FtdCB2ZWtzdCBpIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyIGZyZW0gdGlsIDIwMTguCgpTZXIgZW4gcMOlIGhlbGUgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGkgc2luIGhlbGhldCwgc8OlIHNlciB2aSBlbiBzdsOmcnQgdHlkZWxpZyB2ZWtzdCBpbm5lbiBIZWxzZS0gb2cgU29zaWFsZXRqZW5lc3Rlciwgb2cgcmVkdWtzam9uIGlubmVuIGluZHVzdHJpIGkgaGVsZSByZWdpb25lbi4gS3Zpbm5oZXJhZCwgVHlzbmVzIG9nIEZpdGphciBoYXIgb3BwbGV2ZCBlaW4gbWFya2FudCB2ZWtzdCBpbm5lbiBwcmltw6ZybsOmcmluZy4gKipLYW4gZGV0IHZlcmUgZWluIGdydW5uIHRpbCBkZXR0ZSBzb20gYnVyZGUgZGlza3V0ZXJhc3Q/PyoqCgojIEZvcnRzZXR0IEhlciAoT0EsIEtIKQoKIyMgSGFyZGFuZ2VyCgpUaWwgc2x1dHQgbcOlIHZpIGdqZXJlIGRldCBzYW1tZSBtZWQgKkhhcmRhbmdlcioKCkkgaGVuaG9sZCB0aWwgb3BwZ2F2ZW5zIGtyYXYgdGlsIGJldHJha3RlciB2aSAqSGFyZGFuZ2VyKiBmw7hyIDIwMTkgc29tIFVsbGVuc3ZhbmctIG9nIE9kZGEga29tbXVuZSBzb20gdG8gc2VwYXJlcnRlIGtvbW11bmVyLiBpIDIwMjAgc8OlIGJsZSBVbGxlbnN2YW5nLCBPZGRhIG9nIEpvbmRhbCBzbMOldHQgc2FtbWVuIHRpbCBVbGxlbnN2YW5nLiBEZXR0ZSBmb3JrbGFyZXIgZGVuIHZvbGRzb21tZSDDuGtuaW5nZW4gaSBzeXNzZWxzZXR0aW5nIGkgcmVnaW9uZW4gdmVkIHRpZHNwdW5rdGV0IGZvciBrb21tdW5lc2FtbWVuc2zDpWluZy4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8xfQpoYXJfYXJiICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gw4VyLCB5ID0gVG90YWx0KSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTM6IEhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKQpgYGAKCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMTQ6IEhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhhcl9hcmJfbG9uZ30KaGFyX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhcmRhbmdlcl9BcmJlaWRzdGVkfQpoYXJfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIk9kZGEiLCAiVWxsZW5zdmFuZyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNTogSGFyZGFuZ2VyOiBPZGRhIG9nIFVsbGVuc3ZhbmciLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhcmRhbmdlcl9BcmJlaWRzc3RlZH0KaGFyX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNjogSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKVWxsZW5zdmFuZyBrb21tdW5lIGhhciBzdG9yIGtyYWZ0cHJvZHVrc2pvbiBvZyBob3ZlZG7DpnJpbmdlbiBlciBpbmR1c3RyaS4gTWFqb3JpdGV0ZW4gYXYga3JhZnRwcm9kdWtzam9uZW4gZm9yZWfDpXIgaSB0aWRsaWdlcmUgT2RkYS4gT2RkYSBlciBldCBlbnNpZGlnIGluZHVzdHJpc3RlZCwgbWVuIGhhciBvZ3PDpSBlbiBtYXJpdGltIG7DpnJpbmcgaSB0aWxsZWdnLiBJIGZpZ3VyIDE2IHNlciB2aSBhdCBpbmR1c3RyaW7DpnJpbmdlbiB1dGdqw7hyIGVuIGJldHJha3RlbGlnIHN0w7hycmUgYW5kZWwgYXYgc3lzc2Vsc2V0dGluZ2VuIGkgaGVyLiBJbmR1c3RyaW7DpnJpbmdlbiBlciBvZ3PDpSBvbWZhdHRldCBvZyBieWdnLSBvZyBhbmxlZ2dzdmlya3NvbWhldC4gUMOlIG1vdHNhdHQgc2lkZSBlciBqb3JkYnJ1aywgaGVsc2UtIG9nIHNvc2lhbHRqZW5lc3RlciBkb21pbmVyZW5kZSBpIFVsbGVuc3ZhbmcuIAoKKipHZW5lcmVsdCBvbSBVbGxlbnN2YW5nIGtvbW11bmUqKgoKVWxsZW5zdmFuZyBrb21tdW5lIChtZWQgT2RkYSkgaGFyIGhhdHQgZW4gamV2biBvZyBuZWdhdGl2IGJlZm9sa25pbmdzdmVrc3QgaSBtYW5nZSB0acOlci4gRGV0IGdqZW5zcGVpbGVzIGlra2UgdHlkZWxpZyBpIHbDpXJlIG1vZGVsbGVyIHDDpSBncnVubiBhdiBza2FsYWVuIHNvbSBlciBicnVrdC4gSSB0aWxsZWdnIGhhciB2aSBpa2tlIGhlbnN5bnRhdHQgaW5udmFuZHJlbmRlIGFyYmVpZGVyZSwgZWxsZXIgbWlkbGVydGlkaWdlIGZyYWZseXR0ZWRlIHNvbSBmb3IgZWtzZW1wZWwgc3R1ZGVudGVyLgoKIyAyIAoKRmlubmVyIGxva2FsaXNlcmluZ3Nrdm90aWVudGVyIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciwgb2cgZm9yIHJlZ2lvbmVuIHNhbWxldAoKYGBge3J9CiNvcmRuZXIgZXR0ZXIga29tbXVuZW5hdm4gb2cgw6VyCnRtcCA8LSBzeXNzZWxfYm9zCgpgYGAKCgpgYGB7cn0KaGF1MjAgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGFhciA9PSAiMjAyMCIsIGtuYXZuID09ICJIYXVnZXN1bmQiKQpgYGAKCmBgYHtyfQooaGF1MjAkSW5kdXN0cmkvaGF1MjAkYEFsbGUgTsOmcmluZ2VyYCkKMTkwNS8xODEzNwpgYGAKCmBgYHtyfQpzeXNzZWxfYm9zIDwtIHN5c3NlbF9ib3MgJT4lIAogIG11dGF0ZShFaXJfRXJfaW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSm9yZGJydWsgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgKQpgYGAKCgpgYGB7cn0KbGlicmFyeShyZWFkeGwpCm5hc2pvbmFsdF9ib3N0ZWQgPC0gcmVhZF9leGNlbCgiRGF0YS9uYXNqb25hbHRfYm9zdGVkLnhsc3giKQpgYGAKCmBgYHtyfQpuYXNqb25hbHRfYm9zdGVkIDwtIG5hc2pvbmFsdF9ib3N0ZWQgJT4lIAogIG11dGF0ZShFaW5fRW5fSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaW5fRW5fSm9yZGJydWsgPSBgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaW5fRW5fVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpbl9Fbl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIEZvcmVsw6VyIMOlIHbDpnJlIGxpdHQgbWVyIGZvcnNpa3RpZyBoZXIuIHN5c3NlbF9ib3MkRWlyX0VyX2luZHVzdHJpIGhhciBsZW5nZGUgMjA3CiMgMTMqMTUgKyAxMiAoZGVuIHNpc3RlIE9kZGEpLiBuYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9JbmR1c3RyaSBoYXIgbGVuZ2RlIDEzCiMgS29kZW4gaGVyIGZvcnV0c2V0dGVyIGF0IG5hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0luZHVzdHJpIGthbiByZXBsaWtlcmVzIDE2CiMgZ2FuZ2VyLiBSaXNreSBpIHV0Z2FuZ3NwdW5rdGV0IG9nIGhlciBnw6VyIGRldCBnYWx0IHBnYS4gT2RkYSBtZWQgMTIgb2JzLgojIE1lZGbDuHJlciBhdCByZXN1bHRhdGV0IGJsaXIgZ2FsdCBldHRlciBPZGRhLiBGb3Jlc2zDpXIgw6UgdGEgZGV0IG1lciBzdGVndmlzIHNsaWsgYXQKIyBlbiBnYXIgbWVyIGtvbnRyb2xsCgpMUWluZHVzdHJpIDwtIHN5c3NlbF9ib3MgJT4lIAogIHNlbGVjdChhYXIsIGtuYXZuLCBFaXJfRXJfaW5kdXN0cmkpICU+JSAKICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2Jvc3RlZCwgYWFyLCBFaW5fRW5fSW5kdXN0cmkpLCBieSA9IGMoImFhciIpKSAlPiUgCiAgbXV0YXRlKAogIGFuZGVsID0gRWlyX0VyX2luZHVzdHJpL0Vpbl9Fbl9JbmR1c3RyaQogICkKCiMgRGlzc2UgbcOlIGZpa3NlcyBww6UgdGlsc3ZhcmVuZGUgdmlzLiBIYXIgZmVpbCB2ZXJkaWVyIHNsaWsgZGUgZXIgbsOlIApMUWpvcmRicnVrIDwtIGFzX3RpYmJsZShzeXNzZWxfYm9zJEVpcl9Fcl9Kb3JkYnJ1ay9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9Kb3JkYnJ1aykKTFF1bmRlcnZpc25pbmcgPC0gYXNfdGliYmxlKHN5c3NlbF9ib3MkRWlyX0VyX1VuZGVydmlzbmluZy9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9VbmRlcnZpc25pbmcpCkxRaGVsc2UgPC0gYXNfdGliYmxlKHN5c3NlbF9ib3MkRWlyX0VyX0hlbHNlL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0hlbHNlKQpgYGAKCmBgYHtyfQpzeXNzZWxfYm9zIDwtIHN5c3NlbF9ib3MgJT4lIAogIG11dGF0ZShMUWluZHVzdHJpID0gTFFpbmR1c3RyaSRhbmRlbCwKICAgICAgICAgTFFqb3JkYnJ1ayA9IExRam9yZGJydWssCiAgICAgICAgIExRdW5kZXJ2aXNuaW5nID0gTFF1bmRlcnZpc25pbmcsCiAgICAgICAgIExRaGVsc2UgPSBMUWhlbHNlKQpgYGAKCgpgYGB7cn0KTFFib3MgPC0gc3lzc2VsX2JvcyAlPiUgCiAgc2VsZWN0KGFhciwga25hdm4sIExRaW5kdXN0cmksIExRam9yZGJydWssIExRdW5kZXJ2aXNuaW5nLCBMUWhlbHNlKQpgYGAKCkZvciByZWdpb24gSGF1Z2FsYW5kOgoKYGBge3J9CmhsZF9ib3MgPC0gaGxkX2JvcyAlPiUgCiAgbXV0YXRlKEVpcl9Fcl9pbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9VbmRlcnZpc25pbmcgPSBVbmRlcnZpc25pbmcvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApCmBgYAoKYGBge3J9CkxRaW5kdXN0cmlfaGxkIDwtIGFzX3RpYmJsZShobGRfYm9zJEVpcl9Fcl9pbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9JbmR1c3RyaSkKTFFqb3JkYnJ1a19obGQgPC0gYXNfdGliYmxlKGhsZF9ib3MkRWlyX0VyX0pvcmRicnVrL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0pvcmRicnVrKQpMUXVuZGVydmlzbmluZ19obGQgPC0gYXNfdGliYmxlKGhsZF9ib3MkRWlyX0VyX1VuZGVydmlzbmluZy9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9VbmRlcnZpc25pbmcpCkxRaGVsc2VfaGxkIDwtIGFzX3RpYmJsZShobGRfYm9zJEVpcl9Fcl9IZWxzZS9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9IZWxzZSkKYGBgCgpgYGB7cn0KaGxkX2JvcyA8LSBobGRfYm9zICU+JSAKICBtdXRhdGUoTFFpbmR1c3RyaSA9IExRaW5kdXN0cmlfaGxkJHZhbHVlLAogICAgICAgICBMUWpvcmRicnVrID0gTFFqb3JkYnJ1a19obGQkdmFsdWUsCiAgICAgICAgIExRdW5kZXJ2aXNuaW5nID0gTFF1bmRlcnZpc25pbmdfaGxkJHZhbHVlLAogICAgICAgICBMUWhlbHNlID0gTFFoZWxzZV9obGQkdmFsdWUpICU+JSAKICBzZWxlY3Qow4VyLCBMUWluZHVzdHJpLCBMUWpvcmRicnVrLCBMUXVuZGVydmlzbmluZywgTFFoZWxzZSkKYGBgCgpGb3IgU3VubmhvcmRhbGFuZDoKYGBge3J9CnN1bl9ib3MgPC0gc3VuX2JvcyAlPiUgCiAgbXV0YXRlKEVpcl9Fcl9pbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9VbmRlcnZpc25pbmcgPSBVbmRlcnZpc25pbmcvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApCmBgYAoKYGBge3J9CkxRaW5kdXN0cmlfc3VuIDwtIGFzX3RpYmJsZShzdW5fYm9zJEVpcl9Fcl9pbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9JbmR1c3RyaSkKTFFqb3JkYnJ1a19zdW4gPC0gYXNfdGliYmxlKHN1bl9ib3MkRWlyX0VyX0pvcmRicnVrL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0pvcmRicnVrKQpMUXVuZGVydmlzbmluZ19zdW4gPC0gYXNfdGliYmxlKHN1bl9ib3MkRWlyX0VyX1VuZGVydmlzbmluZy9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9VbmRlcnZpc25pbmcpCkxRaGVsc2Vfc3VuIDwtIGFzX3RpYmJsZShzdW5fYm9zJEVpcl9Fcl9IZWxzZS9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9IZWxzZSkKYGBgCgpgYGB7cn0Kc3VuX2JvcyA8LSBzdW5fYm9zICU+JSAKICBtdXRhdGUoTFFpbmR1c3RyaSA9IExRaW5kdXN0cmlfc3VuJHZhbHVlLAogICAgICAgICBMUWpvcmRicnVrID0gTFFqb3JkYnJ1a19zdW4kdmFsdWUsCiAgICAgICAgIExRdW5kZXJ2aXNuaW5nID0gTFF1bmRlcnZpc25pbmdfc3VuJHZhbHVlLAogICAgICAgICBMUWhlbHNlID0gTFFoZWxzZV9zdW4kdmFsdWUpICU+JSAKICBzZWxlY3Qow4VyLCBMUWluZHVzdHJpLCBMUWpvcmRicnVrLCBMUXVuZGVydmlzbmluZywgTFFoZWxzZSkKYGBgCgpGb3IgSGFyZGFuZ2VyOgoKYGBge3J9Cmhhcl9ib3MgPC0gaGFyX2JvcyAlPiUgCiAgbXV0YXRlKEVpcl9Fcl9pbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9VbmRlcnZpc25pbmcgPSBVbmRlcnZpc25pbmcvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApCmBgYAoKYGBge3J9CkxRaW5kdXN0cmlfaGFyIDwtIGFzX3RpYmJsZShoYXJfYm9zJEVpcl9Fcl9pbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9JbmR1c3RyaSkKTFFqb3JkYnJ1a19oYXIgPC0gYXNfdGliYmxlKGhhcl9ib3MkRWlyX0VyX0pvcmRicnVrL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0pvcmRicnVrKQpMUXVuZGVydmlzbmluZ19oYXIgPC0gYXNfdGliYmxlKGhhcl9ib3MkRWlyX0VyX1VuZGVydmlzbmluZy9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9VbmRlcnZpc25pbmcpCkxRaGVsc2VfaGFyIDwtIGFzX3RpYmJsZShoYXJfYm9zJEVpcl9Fcl9IZWxzZS9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9IZWxzZSkKYGBgCgpgYGB7cn0KaGFyX2JvcyA8LSBoYXJfYm9zICU+JSAKICBtdXRhdGUoTFFpbmR1c3RyaSA9IExRaW5kdXN0cmlfaGFyJHZhbHVlLAogICAgICAgICBMUWpvcmRicnVrID0gTFFqb3JkYnJ1a19oYXIkdmFsdWUsCiAgICAgICAgIExRdW5kZXJ2aXNuaW5nID0gTFF1bmRlcnZpc25pbmdfaGFyJHZhbHVlLAogICAgICAgICBMUWhlbHNlID0gTFFoZWxzZV9obGQkdmFsdWUpICU+JSAKICBzZWxlY3Qow4VyLCBMUWluZHVzdHJpLCBMUWpvcmRicnVrLCBMUXVuZGVydmlzbmluZywgTFFoZWxzZSkKYGBgCgoKIyAzIFN5c3NlbHNldHRpbmcgaSB1bGlrZSBuw6ZyaW5nZXIsIGV0dGVyIGJvc3RlZCAoTW9kZWxsZXIgdW5kZXIgYXJiZWlkKQoKIyMgSGF1Z2FsYW5kZXQKCmBgYHtyIEJvc3RlZF9IYXVnYWxhbmRldF8xfQpobGRfYm9zICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gw4VyLCB5ID0gVG90YWx0KSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkhhdWdhbGFuZGV0IikrCiAgeWxhYigiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKYGBge3IgQm9zdGVkX0hhdWdhbGFuZGV0XzJ9CnN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDExMDYsIDExMzUsIDExNDUsIDExNDYsIDExNDksIDExNTEsIDExNjApKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IGBBbGxlIE7DpnJpbmdlcmAsIChhbmdsZT0wKSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBrbmF2biwgY29sb3VyID0ga25hdm4pKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhzZXEoMi4wLCAyLCBieSA9IC0wLjEpKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsKICBsYWJzKHRpdGxlID0gIkhhdWdhbGFuZGV0IiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgaGxkX2Jvc19sb25nfQpobGRfYm9zX2xvbmcgPC0gc3lzc2VsX2JvcyAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfM19TdMO4cnN0ZV9Cb3N0ZWR9CmhsZF9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiB4OiBIYXVnYWxhbmRldDogSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9IYXVnYWxhbmRldF80X01pbnN0ZV9Cb3N0ZWR9CmhsZF9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQm9rbiIsICJTYXVkYSIsICJUeXN2w6ZyIiwgIlV0c2lyYSIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiB4OiBIYXVnYWxhbmRldDogQm9rbiwgU2F1ZGEgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhdWdlbGFuZGV0XzNfU3TDuHJzdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkhhdWdlc3VuZCIsICJLYXJtw7h5IiwgIlZpbmRhZmpvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGF1Z2FsYW5kZXQ6IEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19IYXVnZWxhbmRldF80X01pbnN0ZV9Cb3N0ZWR9CmhsZF9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQm9rbiIsICJTYXVkYSIsICJUeXN2w6ZyIiwgIlV0c2lyYSIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIYXVnYWxhbmRldDogQm9rbiwgU2F1ZGEsIFR5c3bDpnIgb2cgVXRzaXJhIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCiMjIFN1bm5ob3JkbGFuZAoKYGBge3IgQm9zdGVkX1N1bm5ob3JkbGFuZF8xfQpzdW5fYm9zICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gw4VyLCB5ID0gVG90YWx0KSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIlN1bm5ob3JkYWxhbmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCmBgYHtyIEJvc3RlZF9TdW5uaG9yZGxhbmRfMn0Kc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lIGMoNDYxMSwgNDYxMiwgNDYxMywgNDYxNCwgNDYxNSwgNDYxNiwgNDYxNykpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gYEFsbGUgTsOmcmluZ2VyYCkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBrbmF2biwgY29sb3VyID0ga25hdm4pKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhzZXEoMi4wLCAyLCBieSA9IC0wLjEpKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpICsKICAgbGFicyh0aXRsZSA9ICJTdW5uaG9yZGxhbmQiLCB4ID0gIsOFciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBzdW5fYm9zX2xvbmd9CnN1bl9ib3NfbG9uZyA8LSBzeXNzZWxfYm9zICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBgQWxsZSBOw6ZyaW5nZXJgOlVvcHBnaXR0LAogICAgbmFtZXNfdG8gPSAiTsOmcmluZyIsCiAgICB2YWx1ZXNfdG8gPSAiQW5zYXR0ZSIpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9TdW5uaG9yZGxhbmRfM19TdMO4cnN0ZV9Cb3N0ZWR9CnN1bl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIkt2aW5uaGVyYWQiLCAiU3RvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4geDogU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9TdW5uaG9yZGxhbmRfNF9NaW5zdGVfQm9zdGVkfQpzdW5fYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiRml0amFyIiwgIlN2ZWlvIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiB4OiBTdW5uaG9yZGxhbmQ6IEV0bmUsIEZpdGhhciwgU3ZlaW8gb2cgVHlzbmVzIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfM19TdMO4cnN0ZV9Cb3N0ZWR9CnN1bl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIlN0b3JkIiwgIkt2aW5uaGVyYWQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX1N1bm5ob3JkbGFuZF80X01pbnN0ZV9Cb3N0ZWR9CnN1bl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiRXRuZSIsICJTdmVpbyIsICJGaXRqYXIiLCAiVHlzbmVzIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlN1bm5ob3JkbGFuZDogRXRuZSwgRml0amFyLCBTdmVpbyBvZyBUeXNuZXMiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKIyMgSGFyZGFuZ2VyCgpgYGB7ciBCb3N0ZWRfSGFyZGFuZ2VyXzF9Cmhhcl9ib3MgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBUb3RhbHQpKSArCiAgZ2VvbV9saW5lKCkgKwogIGxhYnModGl0bGUgPSAiSGFyZGFuZ2VyIiwgeT0gIkFsbGUgTsOmcmluZ2VyIikgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKYGBge3IgQm9zdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhhcl9ib3NfbG9uZ30KaGFyX2Jvc19sb25nIDwtIHN5c3NlbF9ib3MgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhcmRhbmdlcl9Cb3N0ZWR9Cmhhcl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiT2RkYSIsICJVbGxlbnN2YW5nIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIHg6IEhhcmRhbmdlcjogT2RkYSBvZyBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19IYXJkYW5nZXJfQm9zdGVkfQpoYXJfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIk9kZGEiLCAiVWxsZW5zdmFuZyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIYXJkYW5nZXI6IE9kZGEsIFVsbGVuc3ZhbmciLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKIyBPcHBnYXZlIDQKClBlbmRsaW5nIGVyIGV0IHZpa3RpZyBiZWdyZXAgw6UgYnJ1a2UgbsOlciB2aSBzbmFra2VyIG9tIHJlZ2lvbmFsIHV0dmlrbGluZy4gRGUgdWxpa2Uga29tbXVuZW5lIGVsbGVyIHJlZ2lvbmVuZSBrYW4gaGEgdWxpa2UgYmVob3YuIERlIGFsbGVyIGZsZXN0ZSBrb21tdW5lciBoYXIgZm9yIGxpdGUgYXJiZWlkc3BsYXNzZXIgaSBmb3Job2xkIHRpbCBhbnRhbGwgYXJiZWlkZW5lLiAgRGV0IHZpbCBzaSBhdCBkZSBmbGVzdGUgcGxhc3NlciBlciBkZSBhdmhlbmdpZ2UgYXYgw6UgcGVuZGxlIHRpbCBhbmRyZSBwbGFzc2VyLiBEZXQga2FuIHbDpnJlIGFuZHJlIGtvbW11bmVyIGkgc2FtbWUgcmVnaW9uIGVsbGVyIGFuZHJlIHJlZ2lvbmVyLiBEZXQgZmlubmVzIG9nc8OlIGJlZ3JlcGV0IG5ldHRvIGlubnBlbmRsaW5nIHNvbSBiZXR5ciBhdCBub2VuIGtvbW11bmVyIGVsbGVyIHJlZ2lvbmVyIGhhciBmbGVyZSBhcmJlaWRzcGxhc3NlciB0aWxnamVuZ2VsaWdlIGVubiBkZSBoYXIgZm9sayB0aWwgw6Ugam9iYmUgZGVyIGlubmFkIGkga29tbXVuZW4uIFZpIHNrYWwgc2UgcMOlIGlubnBlbmRsaW5nIG9nIHV0cGVuZGxpbmcgc29tIHZpbCBrdW5uZSBmb3J0ZWxsZSBvc3MgaSBodmlsa2VuIGdyYWQgZXQgc3RlZCBlciBpbnRlZ3JlcnQgaSBldCBzdMO4cnJlIGFyYmVpZHNtYXJrZWQgaHR0cHM6Ly9yZWdpb25hbGFuYWx5c2Uubm8vcmFwcG9ydC8zMDA0LzEvNC4gCgpWaSBoYXIgbGFnZXQgZW4gdGFiZWxsIHNvbSB0YXIgZm9yIHNlZyByZWdpb25lbiBIYXVnYWxhbmRldC4gSGVyIGthbiB2aSBza2lsbGUgZGUgZm9yc2tqZWxsaWdlIGtvbW11bmVuZSBvZyBzZSBodm9yICBhbmRlbGVuIGF2IGlubnBlbmRsaW5nIG9nIHV0cGVuZGxpbmcgZXIgc3TDuHJzdCBlbGxlciBtaW5zdC4gIAoKVmkga2FuIHNlIHDDpSBLYXJtw7h5IHNvbSBldCBla3NlbXBlbCBuw6VyIGRldCBnamVsZGVyIGlubnBlbmRsaW5nIG9nIHV0cGVuZGxpbmcuIEkgS2FybcO4eSBrb21tdW5lIGVyIGRldCAxMTYzNyBzdHlrayBzb20gam9iYmVyIGkgZWdlbiBrb21tdW5lLCBtZW5zIDU4ODggcGVuZGxlciB0aWwgYW5kcmUga29tbXVuZXIgaSByZWdpb25lbi4gSGVyYXYgcGVuZGxlciA0OTE2IHBlcnNvbmVyIHRpbCBIYXVnZXN1bmQsIDkgcGVuZGxlciB0aWwgU2F1ZGEsIDMxIHBlbmRsZXIgdGlsIEJva24sIDcxMiB0aWwgVHlzdsOmciwgMjE4IHRpbCBWaW5kYWZqb3JkICBvZyAyIHBlcnNvbmVyIHBlbmRsZXIgdGlsIFV0c2lyYS4gTsOlciBkZXQga29tbWVyIHRpbCBpbm5wZW5kbGluZyBrYW4gdmkgc2UgYXQgZGV0IHRpbCBzYW1tZW4gZXIgMzM4NCBzb20gcGVuZGxlciB0aWwgS2FybcO4eSBmcmEgSGF1Z2xhbmRzcmVnaW9uZW4uIERlbiBzdMO4cnN0ZSBhbmRlbGVuIGZyYSBzYW1tZSByZWdpb24gc29tIHBlbmRsZXIgdGlsIEthcm3DuHkgZXIgSGF1Z2VzdW5kLiBWaSBrYW4gc2UgZnJhIHRhYmVsbGVuIGF0IGRldCBlciAyNTg2IHN0eWtrZXIgc29tIHBlbmRsZXIgZnJhIEhhdWdlc3VuZCB0aWwgS2FybcO4eS4gCgpQw6UgVXRzaXJhIHNvbSBoYXIgZW4gbWluZHJlIGJlZm9sa25pbmcgc2VyIHZpIGF0IDg1IGpvYmJlciBpIGhqZW1rb21tdW5lbiwgbWVucyA5IHN0ayBwZW5kbGVyIHRpbCBhbmRyZSBrb21tdW5lIGkgcmVnaW9uZW4sIGhlbmhvbGRzdmlzIHRpbCBIYXVnZXN1bmQsIFR5c3bDpnIgb2cgS2FybcO4eS4gICAKClDDpSBIYXVnYWxhbmRldCBrYW4gdmkgc2UgIAoKYGBge3IgUGVuZGxpbmcgcMOlIEhhdWdhbGFuZGV0fQpoZ2xfUGVuZGxpbmcKYGBgCgpgYGB7ciBQZW5kbGluZyBpIFN1bm5ob3JkbGFuZH0Kc3VuX1BlbmRsaW5nCmBgYAoKLSAgIAoKYGBge3Igc2lzdGV9CiMgU2lzdGUKYGBgCgotICAgCg==
>>>>>>> 286612359b8a6c30c732f3cd7143ffe8cbf6e74c